变量

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)。

  1. 超全局变量 超全局变量是在全部作用域中始终可用的内置变量
  2. $GLOBALS 引用全局作用域中可用的全部变量
  3. $_SERVER 服务器和执行环境信息
  4. $_GET HTTP GET 变量
  5. $_POST HTTP POST 变量
  6. $_FILES HTTP 文件上传变量
  7. $_REQUEST HTTP Request 变量
  8. $_SESSION Session 变量
  9. $_ENV 环境变量
  10. $_COOKIE HTTP Cookies
  11. $php_errormsg 前一个错误信息
  12. $HTTP_RAW_POST_DATA 原生POST数据
  13. $http_response_header HTTP 响应头
  14. $argc 传递给脚本的参数数目
  15. $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。

results matching ""

    No results matching ""