php 全局变量global的使用方法

 更新时间:2016年11月25日 17:32  点击:2239

全局变量和“global”关键字

PHP默认定义了一些“超级全局(Superglobals)”变量,这些变量自动全局化,而且能够在

程序的任何地方中调用,比如$_GET和$ _REQUEST等等。它们通常都来自数据或者其他外部数

据,使用这些变量通常是不会产生问题的,因为他们基本上是不可写的。
但是你可以使用你自己的全局变量。使用关键字“global”你就可以把全局数据导入到一个

函数的局部范围内。如果你不明白“变量使用范围”,请你自己参考PHP手册上的相关说明。
下面是一个使用“global”关键字的演示例子:

<?php教程
$my_var = 'Hello World';
test_global();
function test_global() {
    // Now in local scope
     // the $my_var variable doesn't exist
     // Produces error: "Undefined variable: my_var"
    echo $my_var;
    // Now let's important the variable
    global $my_var;
    // Works:
    echo $my_var;
}
?>

正如你在上面的例子中看到的一样,“global”关键字是用来导入全局变量的。看起来它工

作的很好,而且很简单,那么为什么我们还要担心使用“global”关键字来定义全局数据呢

我来给处入行的人讲解一下全局变量global的使用,”全局变量“,这个名词中的全局两个

字已经告诉我们这个变量在各个地方都能用,先看一个实例:

<?php
$a = 1;
$b = 2;

function Sum()
{
    global $a, $b; //在里面声明为全局变量

    $b = $a + $b;
}

Sum();
echo $b;
?>

结果: 3

如果没有全局变量global在方法内是不能获得$a,$b值的,所以在方法里面想用外面的变量就

需要先声明这个变量为全局变量,这样就可以使用了,很方便吧。

 

<?PHP
      $w3sky = 1;
      $w3sky2 = 2;

function Sum()
       {
       global $w3sky, $w3sky2;$w3sky2 = $w3sky + $w3sky2;
       }Sum();
       echo $w3sky2;
       ?>

以上脚本的输出将是“3”。在函数中申明了全局变量 $w3sky 和 $w3sky2,任何变量的所有

引用变量都会指向到全局变量。对于一个函数能够申明的全局变量的最大个数,PHP 没有限

制。

在全局范围内访问变量的第二个办法,是用特殊的 PHP 自定义 $GLOBALS 数组。前面的例子

可以写成:

例子 使用 $GLOBALS 替代 global

<?PHP
       $w3sky = 1;
       $w3sky2 = 2;function Sum()
       {
       $GLOBALS['w3sky'] = $GLOBALS['w3sky'] + $GLOBALS['w3sky2'];
       }Sum();
       echo $w3sky2;
       ?>

在 $GLOBALS 数组中,每一个变量为一个元素,键名对应变量名,值对应变量的内

容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。以下范例显

示了超全局变量的用处:

例子 演示超全局变量和作用域的例子

<?PHP
       function test_global()
       {
       // 大多数的预定义变量并不 "super",它们需要用 'global' 关键字来使它们在函

数的本地区域中有效。
       global $HTTP_POST_VARS;echo $HTTP_POST_VARS['name'];// Superglobals 在任何

范围内都有效,它们并不需要 'global' 声明。Superglobals 是在 PHP 4.1.0 引入的。
       echo $_POST['name'];
       }
       ?>global 也就是说在一个文件里 只要你声明为global $db 那么在声明的下面 你就

可以引用这个$db了


<?php
function SayMyABCs2()
{
     global $count;
     while($count<10)
        {
           print(chr(ord('A')+$count));
           $count=$count+1;
        }
     print("<br>Now I know $count letters<br>");
}
$count=0;
SayMyABCs2();
$count=$count+1;
print("Now I've made $count function call(s).<br>");
SayMyABCs2();
$count=$count+1;
print("Now I've made $count function call(s).<br>");
?>
output:
ABCDEFGHIJ         //第一次循环依次打印10个大写字母
Now I know 10 letters
Now I've made 11 function call(s).       //第二次由于条件大于10则不执行循环

Now I know 11 letters
Now I've made 12 function call(s).

由于global对变量的声明,现在只有一个$count变量,它在函数内和函数外都被增值了,当

第二次调用SayMyABCs2()时,$count已经是11了,因此根本不会进入打印字母的循环。在函

数内定义的变量的作用域默认情况下是局限于该函数的,使用global声明,就可以通知PHP,

现在需要让一个变量名和它在函数外环境中有同样的含义。声明格式:global

$count1,$count2,...,$countn;
global在另一方面又很有用,尤其是因为PHP提供了一些变量,可在其代码执行之前绑到每个

页面上,它能够让函数看到这些变量,而省去了每次在调用中把它们作为参数传入函数这一

麻烦

显示本月,上月,今天,今年以及各时间起点与终点的做法

mktime() 函数返回一个日期的 Unix 时间戳。

参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。

参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。

PHP Date() 函数
PHP Date() 函数可把时间戳格式化为可读性更好的日期和时间。

语法
date(format,timestamp)参数 描述
format 必需。规定时间戳的格式。
timestamp 可选。规定时间戳。默认是当前的日期和时间。


上面我们简单的讲了一下mktime与date函数,下面我们就来看看利用他们实例今天,上月,下月等日期计算

 

$t = time();
$t1 = mktime(0,0,0,date(“m”,$t),date(“d”,$t),date(“Y”,$t));
$t2 = mktime(0,0,0,date(“m”,$t),1,date(“Y”,$t));
$t3 = mktime(0,0,0,date(“m”,$t)-1,1,date(“Y”,$t));
$t4 = mktime(0,0,0,1,1,date(“Y”,$t));
$e1 = mktime(23,59,59,date(“m”,$t),date(“d”,$t),date(“Y”,$t));
$e2 = mktime(23,59,59,date(“m”,$t),date(“t”),date(“Y”,$t));
$e3 = mktime(23,59,59,date(“m”,$t)-1,date(“t”,$t3),date(“Y”,$t));
$e4 = mktime(23,59,59,12,31,date(“Y”,$t));

参考一下关于mktime()函数

参数 描述
hour 可选。规定小时。
minute 可选。规定分钟。
second 可选。规定秒。
month 可选。规定用数字表示的月。
day 可选。规定天。
year 可选。规定年。在某些系统上,合法值介于 1901 - 2038 之间。不过在 PHP 5 中已经不存在这个限制了。
is_dst

可选。如果时间在日光节约时间(DST)期间,则设置为1,否则设置为0,若未知,则设置为-1。

自 5.1.0 起,is_dst 参数被废弃。因此应该使用新的时区处理特性。

 

//测试
echo date(“当前 Y-m-d H:i:s”,$t).” $t<br>”;
echo date(“今天起点 Y-m-d H:i:s”,$t1).” $t1<br>”;
echo date(“今月起点 Y-m-d H:i:s”,$t2).” $t2<br>”;
echo date(“上月起点 Y-m-d H:i:s”,$t3).” $t3<br>”;
echo date(“今年起点 Y-m-d H:i:s”,$t4).” $t4<br>”;
//测试
echo date(“今天终点 Y-m-d H:i:s”,$e1).” $e1<br>”;
echo date(“今月终点 Y-m-d H:i:s”,$e2).” $e2<br>”;
echo date(“上月终点 Y-m-d H:i:s”,$e3).” $e3<br>”;
echo date(“今年终点 Y-m-d H:i:s”,$e4).” $e4<br>”;
结果:
当前 2011-05-24 15:42:55 1306222975
今天起点 2011-05-24 00:00:00 1306166400
今月起点 2011-05-01 00:00:00 1304179200
上月起点 2011-04-01 00:00:00 1301587200
今年起点 2011-01-01 00:00:00 1293811200
今天终点 2011-05-24 23:59:59 1306252799
今月终点 2011-05-31 23:59:59 1306857599
上月终点 2011-04-30 23:59:59 1304179199
今年终点 2011-12-31 23:59:59 1325347199

看一下date函数

参数 描述
format 必需。规定时间戳的格式。
timestamp 可选。规定时间戳。默认是当前的日期和时间。

PHP 日期 - 格式化日期
date() 函数的第一个参数规定了如何格式化日期/时间。它使用字母来表示日期和时间的格式。这里列出了一些可用的字母:

d - 月中的天 (01-31)
m - 当前月,以数字计 (01-12)
Y - 当前的年(四位数)
您可以在我们的 PHP Date 参考手册中,找到格式参数中可以使用的所有字母。

正则表达式的写法规则:"/规则需要写在2个斜杠中间/"。

(. :小数点)用于匹配除换行符之外的所有字符。
(s:反斜杠小写s)用于匹配单个空格符,包括tab键和换行符;
(S:反斜杠大写S)用于匹配除单个空格符之外的所有字符;
(d:反斜杠d)用于匹配从0到9的数字;也可以这样写:[0-9]
(w:反斜杠小写w)用于匹配字母,数字或下划线字符;
(W:反斜杠大写W)用于匹配所有与w不匹配的字符;
元字符包括: +, *,?

元字符理解起来容易混淆,所以我在后面做了代码结果截图


复制代码 代码如下:
“+”元字符规定其前导字符必须连续出现一次或多次

= 比如/es+/
与“tesseessssseast12354haeasashaha”字符串相匹配,首先要与第一个字母e匹配,然后匹配s,s必须出现一次或多次,请看实例截图。

“*”元字符规定其前导字符必须出现零次或连续多次

= 比如/es*/
与“tesseessssseast12354haeasashaha”字符串相匹配,首先与第一个字母e匹配,后面的s出现零次或者连续出现,看实例。

“?”元字符规定其前导对象必须连续出现零次或一次

= 比如/es?/
与“tesseessssseast12354haeasashaha”字符串相匹配,首先与第一个字母e匹配,后面的s出现零次或者最多出现一次(就是最后一个字母s不重复出现)。

示例代码:
复制代码 代码如下:
$str = "tesseessssseast12354haeasashaha";
echo "=====".$str."
";
echo "/es+/:".preg_replace("/es+/","--",$str)."
";
echo "/es*/:".preg_replace("/es*/","--",$str)."
";
echo "/es?/:".preg_replace("/es?/","--",$str)."
";
?>

 

执行结果截图:

 

另外如果觉得元字符“+*?”比较难理解可以用这种{ }方法代替:

比如es*我们可以写成es{0,},而es+我们可以写成es{1,},es?可以写成es{0,1},注意:当不确定次数的时候就不用写(也不用空格)。

当然我们要指定出现多少次的可以写成这样:es{3}表示s出现3次

举一反三:

比如要替换连续多个空格为一个空格,我可以这样写:preg_replace("/s+/"," ",$str);
比如要找出字符串中的数字(整数):preg_replace("/d+/", "()", $str); 是表示符合规则的字符串值

比如要找出字符串中的带小数点的数字:preg_replace("/d+.d+/", "()", $str); //这里的“.”表示输出小数点

找出由字母组成的字符串:preg_replace("/[a-zA-Z]+/", "()", $str)

找出由(字母、数字混合)组成的字符串:preg_replace("/([a-zA-Z]|d)+/", "()", $str)


正则表达式中“或”运算,使用 “ | ”

例如上面的例子:找出由(字母或数字)混合组成的字符串([a-zA-Z]|d) 也可以这样写([a-zA-Z]|[0-9])

“^”出现在 “[ ]”内时就被视做否定运算符;[^0-9]表示除了数字之外的任何字符。

而当“^”位于“[ ]”之外,或没有“[ ]”时,则应当被视做定位符。

定位符的意思就是比如:“^The”:开头一定要有”The”字符串;类似的:“en$”:$符号表示必须是en结尾。

php教程用户注册过滤中文用户名,在很多开发中,用户名是不允许中文名字的,所以我们今天做个实例,限制中文名注册,在php中我们可以利用正则表达式来限制中文名如preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/"了,下面看实例。

<?php
header("Content-type:text/html;charset=gb2312");
require_once('inc/connect.php');
$xm=isset($_GET['txt'])?$_GET['txt']:'null';
$ta=isset($_GET['tag'])?$_GET['tag']:3;

if( $ta==1 ){
 if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/", $xm)){
   echo("<div id='error'>对不起,不能使用中文作为用户名! </div>");
   exit();
  }
 if($xm=='null' || $xm=='' || strlen($xm)>10 || strlen($xm)<3){
  echo("<div id='error'>对不起,用户由3-12Aa_zZ及数字组成! </div>");
  exit();
 }else{
  $result=mysql教程_query("select m_uid from wk_member where m_uid='$xm' ") or die('Error !'.mysql_error());
  if(!mysql_num_rows($result)){
   echo("<div id='success'><font color=red>&nbsp;&nbsp;&nbsp;&nbsp;恭喜你!此用户可以注册!</font> </div>");
  }else{
   echo("<div id='error'>对不起,用户己被注册请选择其它名称!</div>");
  }
 }

}elseif( $ta==0){
 if(@file_get_contents($xm)){
  echo '<div id="success">&nbsp;&nbsp;&nbsp;&nbsp;博客地址可以访问</div>';
 }else{
  echo '<div id="error">对不起,你输入的博客地址不能正常访问<div >';
 }
}else{
 echo "<div id='error'>对不起,无效的操作!</div>";
}
?>

总结:
方法很简单,只要获取用户输入的资料再利用preg_match判断一下就可以了。

cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 php教程,您能够创建并取回 cookie 的值。
如何创建 cookie?
setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

语法
setcookie(name, value, expire, path, domain);


$content_id = array();//1.创建一个数组
$content_id[] = $_get['contentid']; //2.对接受到的id插入到数组中去

if(isset($_cookie['content_id'])) //3.判定cookie是否存在,第一次不存在(如果存在的话)
{
$now_content = str_replace("", "", $_cookie['content_id']);//(4).您可以查看下cookie,此时如果unserialize的话出问题的,我把里面的斜杠去掉了
$now = unserialize($now_content); //(5).把cookie 中的serialize生成的字符串反实例化成数组
foreach($now as $n=>$w) { //(6).里面很多元素,所以我要foreach 出值
if(!in_array($w,$content_id)) //(7).判定这个值是否存在,如果存在的化我就不插入到数组里面去;
{
$content_id[] = $w; //(8).插入到数组
}
}
$content= serialize($content_id); //(9).把数组实例化成字符串
setcookie("content_id",$content, time()+3600*24); //(10).插入到cookie

}else {
$content= serialize($content_id);//4.把数组实例化成字符串
setcookie("content_id",$content, time()+3600*24); //5.生成cookie
}

$getcontent = unserialize(str_replace("", "", $_cookie['content_id']));
/*foreach($getcontent as $row=>$r)
{
echo $r;//(取值)
}*/

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 解决vue的router组件component在import时不能使用变量问题

    这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • Vue select 绑定动态变量的实例讲解

    这篇文章主要介绍了Vue select 绑定动态变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-23
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • 深入理解PHP变量的值类型和引用类型

    在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式。PHP的变量在内存中是这样...2015-10-23
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • 使用jquery修改表单的提交地址基本思路

    基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23