PHP从入门到精通(第4版)(软件开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

3.5 PHP变量

变量是指在程序执行过程中数值可以变化的量。变量通过一个名字(变量名)来标识。系统为程序中的每一个变量分配一个存储单元,变量名实质上就是计算机内存单元的命名。因此,借助变量名即可访问内存中的数据。

3.5.1 变量声明及使用

视频讲解:光盘\TM\lx\3\09 变量声明及使用.mp4

和很多语言不同,在PHP中使用变量之前不需要声明变量(PHP 4之前需要声明变量),只需为变量赋值即可。PHP中的变量名称用$和标识符表示。标识符由字母、数字或下划线组成,并且不能以数字开头。另外,变量名是区分大小写的。

变量赋值,是指给变量一个具体的数据值,对于字符串和数字类型的变量,可以通过“=”来实现。格式为:

        <?php $name = value; ?>

对变量赋值时,要遵循变量命名规则。如下面的变量命名是合法的:

        <?php
          $thisCup="oink";
          $_Class="roof ";
        ?>

下面的变量命名则是非法的:

        <?php 
          $11112_var=11112;                       //变量名不能以数字字符开头
          $@spcn="spcn";                          //变量名不能以其他字符开头
        ?>

除了直接赋值外,还有两种方式可为变量声明或赋值,一种是变量间的赋值。

【例3.11】变量间的赋值是指赋值后两个变量使用各自的内存,互不干扰。实例代码如下:(实例位置:光盘\TM\sl\3\11)

        <?php
          $string1="mingribook";                  //声明变量$string1
          $string2=$string1;                      //使用$string1初始化$string2
          $string1="mrbccd";                      //改变变量$string1的值
          echo$string2;                           //输出变量$string2的值
        ?>

结果为:mingribook

另一种是引用赋值。从PHP 4开始,PHP引入了“引用赋值”的概念。引用的概念是,用不同的名字访问同一个变量内容。当改变其中一个变量的值时,另一个也跟着发生变化。使用&符号来表示引用。

【例3.12】在本例中,变量$j是变量$i的引用,当给变量$i赋值后,$j的值也会跟着发生变化。实例代码如下:(实例位置:光盘\TM\sl\3\12)

        <?php
          $i="mingribook";                       //声明变量$i
          $j=&$i;                                //使用引用赋值,这时$j已经赋值为mingribook
          $i="mrbccd";                           //重新给$j赋值
          echo$j;                                //输出变量$j
          echo "<br>";
          echo$i;                                //输出变量$i
        ?>

结果为:mrbccd

mrbccd

注意

引用和复制的区别在于:复制是将原变量内容复制下来,开辟一个新的内存空间来保存,而引用则是给变量的内容再起一个名字。可以这样理解,一些文学爱好者经常会向报纸、杂志投稿,但一般不会用真名,而是笔名,这个笔名就可以看作是一个引用。

3.5.2 变量作用域

视频讲解:光盘\TM\lx\3\10 变量作用域.mp4

在使用变量时,要符合变量的定义规则。变量必须在有效范围内使用,如果变量超出有效范围,则变量也就失去其意义了。变量的作用域如表3.9所示。

表3.9 变量的作用域

在函数内部定义的变量,其作用域为所在函数,如果在函数外赋值,将被认为是完全不同的另一个变量。在退出声明变量的函数时,该变量及相应的值就会被清除。

【例3.13】本例用于比较在函数内赋值的变量(局部变量)和在函数外赋值的变量(全局变量),实例代码如下:(实例位置:光盘\TM\sl\3\13)

        <?php
          $example="在……函数外";                           //声明全局变量
          function example(){
              $example="……在函数内……";                   //声明局部变量
              echo"在函数内输出的内容是:$example.<br>";     //输出局部变量
          }
          example();                                         //调用函数,输出变量值
          echo"在函数外输出的内容是:$example.<br>";         //输出全局变量
        ?>

运行结果如图3.9所示。

图3.9 局部变量的使用

静态变量在很多地方都能用到。例如,在博客中使用静态变量记录浏览者的人数,每一次用户访问和离开时,都能够保留目前浏览者的人数。在聊天室中也可以用静态变量来记录用户的聊天内容。

【例3.14】下面使用静态变量和普通变量同时输出一个数据,查看一下两者的功能有什么不同。实例代码如下:(实例位置:光盘\TM\sl\3\14)

        <?php
          function zdy (){
            static$message=0;                        //初始化静态变量
            $message+=1;                             //静态变量加1
            echo$message."";  }                      //输出静态变量
          function zdy1(){
            $message=0;                              //声明函数内部变量(局部变量)
            $message+=1;                             //局部变量加1
            echo$message."";  }                      //输出局部变量
          for($i=0; $i<10; $i++)    zdy();           //输出1~10
          echo "<br>";
          for($i=0; $i<10; $i++)    zdy1();          //输出10个1
          echo "<br>";
        ?>

运行结果如图3.10所示。

图3.10 比较静态变量和普通变量的区别

自定义函数zdy()是输出从1~10共10个数字,而zdy1()函数输出的是10个1。自定义函数zdy()含有静态变量,而函数zdy1()是一个普通变量。初始化都为0,再分别使用for循环调用两个函数,结果是静态变量的函数zdy()在被调用后保留了$message中的值,而静态变量的初始化只是在第一次遇到时被执行,以后就不再对其进行初始化操作了,将会略过第3行代码不执行;而普通变量的函数zdy1()在被调用后,其变量$message失去原来的值,重新被初始化为0。

全局变量可以在程序中的任何地方访问,但是在用户自定义函数内部是不可用的。想在用户自定义函数内部使用全局变量,要使用global关键字声明。

【例3.15】在自定义函数中输出局部变量和全局变量的值。实例代码如下:(实例位置:光盘\TM\sl\3\15)

        <?php
        $hr="黄蓉";                    //声明全局变量$hr
        function lxt(){
            $gj="郭靖";                //声明局部变量$gj
            echo$gj."<br>";            //输出局部变量的值
            global$hr;                 //利用关键字global在函数内部定义全局变量
            echo$hr."<br>";            //输出全局变量的值
        }
        lxt();
        ?>

结果为:郭靖

黄蓉

3.5.3 可变变量

视频讲解:光盘\TM\lx\3\11 可变变量.mp4

可变变量是一种独特的变量,它允许动态改变一个变量名称。其工作原理是该变量的名称由另外一个变量的值来确定,实现过程就是在变量的前面再多加一个美元符号“$”。

【例3.16】下面使用可变变量动态改变变量的名称。首先定义两个变量$a和$b,并且输出变量$a的值,然后使用可变变量来改变变量$a的名称,最后输出改变名称后的变量值,实例代码如下:(实例位置:光盘\TM\sl\3\16)

        <?php
          $a="b";                   //声明变量$a
          $b="我喜欢PHP";           //声明变量$b
          echo$a;                   //输出变量$a
          echo "<br>" ;
          echo$$a;                  //通过可变变量输出$b的值
        ?>

结果为:b

我喜欢PHP

3.5.4 PHP预定义变量

视频讲解:光盘\TM\lx\3\12 PHP预定义变量.mp4

PHP提供了很多非常实用的预定义变量,通过这些预定义变量可以获取用户会话、用户操作系统的环境和本地操作系统的环境等信息。常用的预定义变量如表3.10所示。

表3.10 预定义变量