3.4PHP中可变变量和预定义变量
下一篇: 3.5.1PHP算数运算符
可变变量
可变变量是一种独特的变量,它允许动态改变一个变量名称。其工作原理很简单,就是该变量的名称由另外一个变量的值来确定,实现过程就是在变量的前面再多加一个美元符号"$"。
实例1:
<?php $a = "hello"; /*使用了两个美元符号后,就可以 作为一个可变变量了。 */ $$a = "test"; /*上面两个变量都被定义了,$a的内容 是"hello",而且$hello的内容是"test" */ echo "$a ${$a}"."<br/>"; echo "$a $hello"; ?> 上面的输出结果: hello test hello test
将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]} ,对第二种情况用 ${$a}[1] 。
类的属性也可以通过可变属性名来访问。可变属性名将在该调用所处的范围内被解析。例如,对于 $foo->$bar 表达式,则会在本地范围来解析 $bar 并且其值将被用于 $foo 的属性名。对于 $bar 是数组单元时也是一样。
实例2:
<?php class foo{ var $bar = 'I am bar.' ; var $arr = array('I am A.','I am B.'); var $r = 'I am r.' ; } $foo = new foo (); $bar = 'bar' ; $baz = array( 'foo' , 'bar' , 'baz' , 'quux' ); echo $foo -> $bar . "\n" ; echo $foo -> $baz [ 1 ] . "\n" ; $start = 'b' ; $end = 'ar' ; echo $foo ->{ $start . $end } . "\n" ; $arr = 'arr' ; echo $foo -> $arr [ 1 ] . "\n" ; echo $foo ->{ $arr }[ 1 ] . "\n" ; ?> 以上实例输出: I am bar. I am bar. I am bar. I am r. I am B.
预定义变量
PHP还提供了很多非常实用的预定义变量,通过这些预定义变量可以获取到用户的会话、用户操作系统的环境和本地操作系统等信息。常用的预定义变量如下:
$_SERVER[‘SERVER_ADDR’] 当前运行脚本所在的服务器的IP地址。
$_SERVER[‘SERVER_NAME’] 当前运行脚本所在服务器主机名称。如果该脚本运行在一个虚拟主机上,则该名称由虚拟主机所设置的值决定。
$_SERVER[‘REQUEST_METHOD’] 访问页面时的请求方法,如GET、HEAD、POST、PUT等,如果请求的方式时HEAD,PHP脚本将发出头信息后中止(这意味着在产生任何输出后,不再有输出缓冲)。
$_SERVER[”REMOTE_ADDR] 正在浏览当前页面用户的IP地址。
$_SERVER[‘REMOTE_HOST’] 正在浏览当前页面用户的主机名。反向域名解析基于该用户的REMOTE_ADDR。
$_SERVER[‘REMOTE_PORT’] 用户连接到服务器时所使用的端口。
$_SERVER[‘SCRIPT_FILENAME’] 当前执行脚本的绝对路径名。注意:如果脚本在CLI中被执行,作为相对路径,如file.php或者
../file.php,$_SERVER[‘SCRIPT_FILENAME’]将包含用户指定的相对路径。
$_SERVER[‘SERVER_PORT’] 服务器所使用的端口,默认为80.如果使用SSL安全连接,则这个值为用户设置的HTTP端口。
$_SERVER[‘SERVER_SIGNATURE’] 包含服务器版本和虚拟主机名的字符串。
$_SERVER[‘DOCUMENT_ROOT’] 当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_COOKIE 通过HTTPCookie传递到脚本的信息。这些cookie多数是由执行PHP脚本时通过setcookie()函数设置的。
$_SESSION 包含与所有会话变量有关的信息。$_SESSION变量主要应用于会话控制和页面之间值的传递。
$_POST 包含通过POST方法传递的参数的相关信息。主要用于获取通过POST方法提交的数据。
$_GET 包含通过GET方法传递的参数的相关信息。主要用于获取通过GET方法提交的数据。
$GLOBALS 由所有已定义全局变量组成的数组。变量名就是该数组的索引。它可以称得上是所有超级变量的超级组合。
下一篇: 3.5.1PHP算数运算符