PHP变量详解
基础
PHP中一个美元符号后面跟上一个变量名称,即表示一个变量。变量的名称是对大小写敏感的。
变量名与PHP中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:‘[a-zA-Z_“x7f-“xff][a-zA-Z0-9_“x7f-“xff]*‘
注:字母为a-z,A-Z,ASCII字符从127到255(0x7f-0xff)。
<?php
$var="Bob";
$Var="Joe";
echo"$var,$Var";//outputs"Bob,Joe"
$4site=‘not yet‘;//invalid;starts with a number
$_4site=‘not yet‘;//valid;starts with an underscore
$t?yte=‘mansikka‘;//valid;‘洄is(Extended)ASCII228.
?>
PHP3中,变量总是传值赋值。那也就是说,当你将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。有关这种类型的赋值操作,请参阅表达式一章。
PHP4提供了另外一种方式给变量赋值:传地址赋值。这意味着新的变量简单的引用(换言之,“成为其别名”或者“指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。这同样意味着其中没有执行复制操作;因而,这种赋值操作更加快速。尽管如此,任何提速的操作只有在紧密循环或者大数组或者对象才可能被注意到。
使用传地址赋值,简单地追加一个(&)符号到将要赋值的变量前(源变量)。例如,下列代码片断两次输出‘My name is Bob’:
<?php
$foo=‘Bob‘;//Assign the value‘Bob‘to$foo
$bar=&$foo;//Reference$foo via$bar.
$bar="My name is$bar";//Alter$bar...
echo$bar;
echo$foo;//$foo is altered too.
?>
需要注意的是只有命名变量才可以传地址赋值,这一点非常重要。
<?php
$foo=25;
$bar=&$foo;//This is a valid assignment.
$bar=&(24*7);//Invalid;references an unnamed expression.
function test()
{
return25;
}
$bar=&test();//Invalid.
?>
预定义变量
PHP提供了大量的预定义变量。由于许多变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在PHP以命令行形式运行时并不生效。有关这些变量的详细列表,请参阅“保留的预定义变量”一章。
警告
PHP4.2.0以及后续版本中,PHP指令register_globals的默认值为off。这是PHP的一个主要变化。让register_globals的值为off将影响到预定义变量集在全局范围内的有效性。例如,为了得到DOCUMENT_ROOT的值,你将必须使用$_SERVER[‘DOCUMENT_ROOT‘]代替$DOCUMENT_ROOT,又如,使用$_GET[‘id‘]来代替$id从URL http://www.example.com/test.php?id=3中获取id值,亦或使用$_ENV[‘HOME‘]来代替$HOME获取环境变量HOME的值。
相关信息,请阅读配置项目register_globals,有关安全性的一章使用Register Globals,以及PHP4.1.0和4.2.0的发行通告.
请优先使用可用的PHP预定义变量,如超级全局数组。
从PHP4.1.0开始,PHP提供了一套附加的预定数组,这些数组变量包含了来自Web服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。为此,它们常因是"autoglobals"或者"superglobals"而闻名。(PHP中尚且没有一种可使用户自定义超级全局变量的机制)超级全局变量罗列于下文中;但是为了得到它们的内容和关于PHP预定义变量的进一步的讨论以及它们的本质,请参阅预定义变量。而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自PHP5.0.0起,冗长的PHP预定义变量可以通过设置register_long_arrays来屏蔽。
可变变量:超级全局变量不能被用作可变变量.
如果某些variables_order中的变量没有设定,它们的对应的PHP预定义数组也是空的。
【内容导航】
第1页:基础第2页:PHP超全局变量第3页:The global keyword第4页:全局和静态变量的引用第5页:PHP的外部变量