🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 变量 ## 基本介绍 * PHP中的变量用一个美元符号(`$`)后面加变量名来表示,**变量名区分大小写**。 * 一个有效的变量名由字母或者下划线开始,后面跟上任意数量的字母、数字、下划线以及 **中文汉字**。 * `$this` 是一个特殊的变量,它不能被赋值。 * 变量的赋值分为默认的 **传值赋值** 和 **引用赋值**。 * 引用赋值,使用时需在即将赋值的变量名前面加上`&`(and符号),例如`$two = &$one;`,这样新的`$two`变量的值如果发生改变,那么原始变量`$one`的值也会随之改变,反过来也一样。 * 变量可以使用引用赋值,但是没有名字的表达式不可以,例如`$two = &(5+6)`。 ## 作用范围 * 变量有作用范围,大部分变量只有一个单独的范围,这个范围通常是指同处一个最近的上级大括号里,也就是同一个代码块里。 * 处于子代码块(如函数等)里的变量,我们叫他 **"局部变量"**,此外的变量可称之为 **"全局变量"**。 * 在同一个代码块里时,使用 `include` 或 `require` 引入的变量可以被使用,下面两种方式都是正确的。 ~~~ <?php // 引入A文件,里面就一行代码:$a = 123; include "a.php"; // 这里可以引用到变量$a echo $a; // 定义b变量 $b = 456; // 引入B文件,里面就一行代码:echo $b; include "a.php"; ?> ~~~ * 函数里的变量将有自己的作用范围,我们叫它局部变量,如果在函数里面需要使用外面的全局变量,需要通过`global`关键字声明变量,也可以使用PHP自定义的`$GLOBALS`数组来访问。 * 如下面这个例子中,调用`test()`函数将不会输出任何内容,而且会提示`$str`未定义的错误。 ~~~ <?php // 定义变量 $str = "abc"; // 定义函数 function test(){ // 输出str变量 echo $str; } // 调用函数 test(); ~~~ * 将上面的例子修改一下,通过`global`关键字可以正确的访问到`$str`变量,结果将在浏览器上正确的输出字符串`"abc"`。 ~~~ <?php // 定义变量 $str = "abc"; // 定义函数 function test(){ // 声明变量 global $str; // 输出str变量 echo $str; } // 调用函数 test(); ~~~ * 将上面的例子还可以修改一下,通过PHP系统自定义的`$GLOBALS`数组来访问全局变量,结果也是正确的。 ~~~ <?php // 定义变量 $str = "abc"; // 定义函数 function test(){ // 输出str变量 echo $GLOBALS["str"]; } // 调用函数 test(); ~~~ * `$GLOBALS` 是一个 **超全局变量**,在系统运行时,里面会自动存入很多的系统变量和我们自定义的全局变量。 ## 静态变量 * 通过`static`声明的变量称之为**静态变量**,静态变量在程序执行完成并且离开该作用范围后还会一直存在。 ~~~ <?php function test(){ // 声明静态变量 static $count = 0; // 静态变量自增 $count++; // 输出静态变量 echo $count; } // 第一次调用,输出1 test(); // 第一次调用,输出2 test(); ~~~ * 静态变量的赋值对象不允许是表达式。 * 静态变量是编译时解析的。 ## 可变变量 * 可变变量指的是一个变量的名称可以动态的设置和使用。 * 在变量的前面加上一个`$`美元符号,就可以使用可变变量,如下面的例子中,`$$a`对于系统来说会先拆分成`$`和`$a`,因为`$a`等于`key`,所以计算结果是`$key`。 ~~~ // 定义A变量,值为key $a = "key"; // 定义可变变量,值为value,相当于$key = "value" $$a = "value"; // 输出$$a,得到value; echo $$a; // 输出$key,得到value; echo $key; ~~~ * 系统解析可变变量的时候 * 在可变变量遇上数组的时候,需要解决一个让系统纠结的问题,例如`$$key[1]`,系统在解析的时候会出现如下两个情况: * 情况一:`$` + `$key[1]`。 * 情况二:`$$key` + `[1]`。 * 对于上面两种情况,系统默认选择的是按情况一处理,假如我们想明确的控制,需要按下面这种方式使用: * 情况一:`${$key[1]}`。 * 情况二:`${$key}[1]`。 * 官方的一个例子 ~~~ <?php $Bar = "a"; $Foo = "Bar"; $World = "Foo"; $Hello = "World"; $a = "Hello"; $a; // 得到 Hello $$a; // 得到 World $$$a; // 得到 Foo $$$$a; // 得到 Bar $$$$$a; // 得到 a $$$$$$a; // 得到 Hello $$$$$$$a; // 得到 World ~~~ > 注意,在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用。 ## 来自HTML页面中form的变量 * 通过系统内置的`$_GET`或`$_POST`数组可以分别获取来自于form表单GET或POST的内容,其中键对应input等标签的name属性值,值对应value的值。 * form表单中可以传递数组给PHP,只需给input等标签的name值后面加上数组索引。 * form表单中标签name值里如果包含了特殊字符(不符合PHP变量定义规则的字符),系统会自动将其转换成下划线。