变量
PHP 中的变量用一个美元符号后面跟变量名来表示。变量名是区分大小写的。
变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。
<?php
$var = 'Bob'; // 小写var
$Var = 'Joe'; // 大写Var
echo "$var, $Var"; // 输出 "Bob, Joe"
$4site = 'not yet'; // 非法变量名;以数字开头
$_4site = 'not yet'; // 合法变量名;以下划线开头
$站点 = '百度'; // 合法变量名;可以用中文
传值与引用
变量默认总是传值赋值。那也就是说,当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
PHP 也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。
使用引用赋值,简单地将一个 &
符号加到将要赋值的变量前(源变量)。例如,下列代码片断将输出“My name is Bob”两次:
<?php
$foo = 'Bob'; // 将 'Bob' 赋给 $foo
$bar = &$foo; // 通过 $bar 引用 $foo
$bar = "My name is $bar"; // 修改 $bar 变量
echo $bar;
echo $foo; // $foo 的值也被修改
?>
变量初始化
虽然在 PHP 中并不需要初始化变量,但对变量进行初始化是个好习惯。使用未初始化的变量会发出 E_NOTICE 错误。
未初始化的变量具有其类型的默认值。布尔类型的变量默认值是 FALSE,整形和浮点型变量默认值是零,字符串型变量(例如用于 echo 中)默认值是空字符串以及数组变量的默认值是空数组。可以使用isset() 函数检测一个变量是否已被初始化。
预定义变量
PHP 提供了一套附加的预定数组,这些数组变量包含了来自 web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在任何范围内自动生效。因此通常被称为自动全局变量(autoglobals)或者超全局变量(superglobals)。
- 超全局变量 超全局变量是在全部作用域中始终可用的内置变量
- $GLOBALS 引用全局作用域中可用的全部变量
- $_SERVER 服务器和执行环境信息
- $_GET HTTP GET 变量
- $_POST HTTP POST 变量
- $_FILES HTTP 文件上传变量
- $_REQUEST HTTP Request 变量
- $_SESSION Session 变量
- $_ENV 环境变量
- $_COOKIE HTTP Cookies
- $php_errormsg 前一个错误信息
- $HTTP_RAW_POST_DATA 原生POST数据
- $http_response_header HTTP 响应头
- $argc 传递给脚本的参数数目
- $argv 传递给脚本的参数数组
变量作用域
变量的范围即它定义的上下文背景(也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:
<?php
$a = 1; // 全局变量
function Test()
{
echo $a; // 函数内部的局部变量
}
Test();
?>
上述脚本会提示变量未定义的错误信息。因为 echo 语句引用了一个局部变量 $a,而且在这个范围内,它并没有被赋值。
使用global或者 $GLOBALS
数组,能在函数区块中使用全局变量。 如:
<?php
$a = 1; // 全局变量
function Test() {
global $a; // 使用global关键字申明全局变量
echo $a; // 将显示全局变量的内容
}
Test();
?>
上述代码将输出1。从这个例子中我们可以看到,全局变量确实在函数内部可以使用。上述语句中,还可以使用$GLOBALS
数组:
$a = 1; // 全局变量
function test2() {
echo $GLOBALS['a']; // 使用全局数组
}
test2();
上面的代码还是输出1,只不过使用的是全局性数组的方式。
可变变量
有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如:
<?php
$a = 'hello';
$$a = ' world';
echo $a, $$a;
?>
一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,上述语句将输出hello world。