什么是变量
变量指的就是在程序执行过程中数值可以变化的量,它与我们所讲的常量是相反的,我们常量是只要被定义了,在程序中就不能被改变。而变量是可以变的。
变量作用
变量就是用来保存我们值,相当于一个存储数据的容器。
x = 5;
y = 6;
z = x + y;
从上面的表达式 z = x + y;我们能够计算出 z 的值是 11
在 PHP 中,这三个字母就被称为变量。
变量赋值
变量赋值,是指给一个变量具体的数据值,对于字符串和数字类型的变量,可以通过“=”来实现赋值,像上面一样例子一样,x和y是变量,那么5和6就是变量的值了。
声明变量
通过美元符号 $变量名称 来表示变量
$x = 5;
$y = 6;
$z = $x + $y
上面的实例就完成了我们对变量的定义与赋值了。
PHP 变量规则
- 变量以 $ 符号开始,后面跟着变量的名称
- 变量名必须以字母或者下划线字符开始
- 变量名只能包含字母数字字符以及下划线
- 变量名不能包含空格
- $A驼峰标记法(firstName)或者下划线法命名(first_name)
- 变量名称严格区分大小写,$y和$Y是两个变量,如果变量名称重复,后面的值会覆盖前面的值
- 变量可以不声明,直接使用
除了上面的变量直接赋值外,还有两种方式可以声明变量和赋值,一种是变量间的赋值,什么意思呢?看下面的实例
<?php
$str1 = 'hello';
$str2 = $str1;
$str1 = 'world';
echo $str2;
输出 “hello”
我们并没有给变量$str2直接赋值,而是将变量$str1赋值给$str2,这就是我们变量间的赋值。
另一种是引用赋值。从PHP4开始,PHP引入了“引用赋值”的概念,就是用不同的名字访问同一个变量内容。当改变其中任何一个变量的值,另一个也会发生变化。引用赋值使用“&”来表示引用。
引用和赋值的区别在于,赋值是将原变量内容复制下来,再用一个新的内存空间来保存,而引用则是给变量的内容在起一个名字,相当于一个别名。就好像一些文学爱好者经常会向报纸,杂志投稿件,但一般都不会真名,而是用笔名,这个笔名就可以看作是一个引用。
<?php
//php引用变量:不同变量名指向同一地址
//定义一个变量a,此时内存开辟了一块区域,$a指向该区域
$a = 100;
var_dump($a); //int 100
//定义变量b,将a变量的值赋值给b,此时该区域有两个变量($a和$b)指向。
$b = $a;
var_dump($b); //int 100
//修改$a变量的值,php变量具有Copy On Write的特性,所以会复制并重写a所指向的区域值,此时a和b分别指向不同区域。
$a = 10;
var_dump($a); //int 10
var_dump($b); //int 100
$c = 100;
$d = &$c;
$c = 10;
var_dump($c); //int 10
var_dump($d); //int 10
//当引用指向时,php变量不在具有Copy On Write特性,且指向同一内存区域,无论$c或$d谁变化,另外一个都会变化
可变变量(使用两个美元符号($))
$a = "hello";
$$a = "world";
两个变量都被定义了:$a 的内容是“hello”,并且 $hello 的内容是“world”。因此,可以表述为:
echo “$a ${$a}”;或者 echo “$a $hello”;它们都会输出:hello world
变量作用域
变量在使用时要符合变量的定义规则。变量必须在有效的范围使用,如果变量超出了有限范围,变量也就没有意义了,就好像我们有一沓人民币,我们可以在中国购买商品,但如果来到国外,那么这一沓人民币也就不能用了。这一沓人民币就相当于这个变量,而中国以内的范围就相当于作用域。
PHP的变量由于作用域不同分为:局部变量,全局变量和静态变量,如下表:
局部变量 | 在函数的内部定义的变量,作用域就是所在的函数范围 |
全局变量 | 在被定义所有的函数以外的变量,作用域是整个PHP文件,但是在用户自定义函数内部是不能使用的。如果希望用户在用户自定义函数内部使用全局变量,则使用global关键字声明全局变量 |
静态变量 | 能够在函数调用结束后仍保留变量值,当再次回到其作用域,又可以继续使用原来的值。而一般变量是在函数调用后,其存储的数据值会被清除,所占用的内存空间也会被释放。使用静态变量时,先要用关键字static来声明变量,把关键字static放在要定义的变量之前 |
TIPS
在函数内部定义的变量,其作用域为所在的函数,如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。
本实例用于比较在函数内赋值的变量(局部变量)和在函数外赋值的变量(全局变量),实例代码如下:
<?php
$exam= "在函数外定义"; //声明全局变量
function add(){
$exam="在函数内定义"; //声明局部变量
echo "在函数内输出的内容是:".$exam."<br/>"; //输出局部变量
}
add(); //调用函数
echo "在函数外输出的内容是:".$exam; //输出全局变量
?>
运行结果:
在函数内输出的内容是:在函数内定义
在函数外输出的内容是:在函数外定义
静态变量在很多地方都能用到,静态变量类型说明符是static。
- static全局变量只初始化一次,防止在其他文件单元中被引用
- static局部变量只被初始化一次,下一次依据上一次结果值
- static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
下面的实例使用静态变量和普通变量同事输出一个数据,查看一下两者的功能有什么不同,代码如下:
<?php
function zdy0(){
static $message = 0; //初始化静态变量
$message+=1;
echo $message." ";
}
function zdy1(){
$message = 0; //初始化静态变量
$message+=1;
echo $message." ";
}
for ($i=0;$i<10;$i++){
zdy0(); //输出1~10
}
echo "<br>";
for ($i=0;$i<10;$i++){
zdy1(); //输出10个1
}
发表评论