PHP开发 加入小组

298个成员 3006个话题 创建时间:2011-05-30

PHP变量解析

发表于 2012-04-25 4196 次查看

首先,我们把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

 

 

 

 

 

 

发表回复
功能维护升级中,维护完成完后将再次开放,非常抱歉给您学习造成的不便。