首先,我们把PHP的变量分为两类,其一是用户定义的变量,其二是PHP自带全局变量。
用户自定义变量:
PHP变量名由符号$加字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。例如定义一个变量name:
$name;
形如:$2name, name, $#name等都是不符合要求的,运行是会报错。这里有一个特殊情况,就是$$name是合法的,等下再讨论。
要給一个变量赋值,可以使用赋值符号=,记住,=是赋值符号,不是等于符号,等于符号是==。
<?php
$name = "姓名";//把字符串“姓名”赋給了变量name
echo $name;//将会输出姓名
?>
可变变量:
刚刚我们说到$$name也是合法的,这就是PHP的一个特性,叫做可变变量。也就是你的变量名字也是可以改变的,例如:
<?php
$name = "a";
$$name = "b";
echo $a;//将会输出b
?>
$a那里来的呢?其实$$name就是$a。你可以这样理解:第一行定义了$name = "a";$name的值就是a了,把第二行的$$name中的$name换成a,就得到了$a="b";很容易理解吧。
一次类推, 形如$$$$$name这种的就不难理解了。
变量的作用域:
PHP的变量有三种,超全局变量,全局变量,局部变量。
超全局变量是在整个项目中都可以用的,无论那个文件,无论什么时候,比如PHP内置变量$_POST、_GET、_SESSION、 __DIR__、$_FILES、$_SERVER等等。
全局变量一般来说对相对与一个文件,局部变量是相对于函数而言。打个比方,一个文件相当与一个封闭的房子,一个函数相当与一个封闭的箱子,一个房子可以包含多个箱子,这些箱子都漂浮在房子中。
你在房子里面放一个东西,和箱子一起漂浮在房子里面,这个东西只有在房子里面的人可以看到,但是在子箱子里的人就看不到。如果你放在其中一个箱子里,箱子外面的人是看不到的,其他箱子里的人也是看不到的。
<?php
$a = 'a';
function box1(){
$b_in_box1 = "bib1";
echo $b_in_box1;//可一输出,因为在box1里面定义的
echo $a;//无法输出,他在box1外面,没法获取到。开启报notice错误的话会提示$a没有定义,配置在php.ini里面
}
function box2(){
$b_in_box2 = "bib2";
echo $b_in_box1;//没输出,应为$b_in_box1是在box1里面,无法访问到。同理,要在box1里面输出$b_in_box2也是不行的
echo $b_in_box2;//输出bib2
echo $a;//同上,
}
echo $a;//可以,
echo $b_in_box1;//不行,因为他在box1里面,同样,在box2里面定义的变量我们也无法获取到
?>
如果我们要在函数里面使用外面的变量怎么办?有两种方法,一是传参数,而是在函数内部使用global关键字。
<?php
$a="a";//函数外面定义了变量$a
function box1($parameter){//定义了一个带参数的函数box1,并在函数内部输入传进去的参数
echo $parameter;
}
box1($a);//把$a当作参数传到box1里面去,此时$parameter就是$a了。输出它相当于是输入$a
function box2(){//定义一个函数box2
global $a;//用global关键字操作$a。这句话可以这样理解,用global去外面把$a拉进来,然后你就可以在box里面使用它了。你只是把它拉到box2中,在box1或者其他函数中他仍然不可以用的。
echo $a;//输出a
}
?>
引用传递符&:
接触过C/C++的对&应该不会陌生,先看一个例子:
<?php
$a = "a";
$b=&$a;
$b = "b";
echo $a; //输出b
?>
怎么$a的值变成b了呢,&$a是什么?&$a就是存放变量值的地方。$a="a"可以翻译为:$a,你把a給我放到容器里面去。echo $a可以理解为:$a,你去把容器里面的东西拿出来。现在我不通过$a了,我直接找到存放的容器($b = &$a),直接把容器里面的东西换成b($b='b');当你再让$a把容器里面的东西拿出来的时候(echo $a;)他已经变成b了。
通过这种方式,我们就可以在函数内部改变函数外面的值,但是在最新的php版本中会得到一条警告:
Deprecated: Call-time pass-by-reference has been deprecated in E:\WAMP\web\test\xxxx.php on line 7
可以参考http://php.net/manual/zh/language.references.pass.php
<?php
$a = "a";
function changeA(&$a){
$a = "b";
}
changeA(&$a);
echo $a; //讲输出b
?>
有不对的地方希望有大家提出来,写給新同学看的~~
参考文件:http://www.php.net/manual/zh/language.variables.php