PHP网络编程学习笔记
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 变量与常量

顾名思义,变量就是在PHP程序执行过程中可以改变其值的量,常量就是在PHP程序执行过程中不可以改变其值的量。

变量名由一个合法的PHP字符串来表示,变量的值可以改变。常量分为内容常量和字符常量。内容常量是指其具有固定值或内容的字符串本身,比如3.14、"WindowsXP"本身就是常量,其值具有唯一确定性。字符常量是指用常量名来表示一个恒定的值。

3.3.1 定义常量

常量的使用是将程序中多处相同的内容用一个常量表示,可以简化程序和增加可读性。当定义了常量后,可以在以后的脚本语句中使用这个常量。通常在程序文件的开头部分定义常量,根据需要对其更改较为容易。

常量具有以下3个特点:

1 必须用函数define()定义。

2 定义完后其值不能再被改变。

3 使用时直接用常量名,不能像变量一样在前面加$。

例如:

PHP语言中预定义了一些常量,用户不必再去定义即可直接使用,我们称它们为系统常量。除了为数不多的内核系统常量外,很多系统常量是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现。下面列举4个系统常量。

1 FILE:PHP程序文件名

2 LINE:PHP程序文件的行数

3 PHP_VERSION:当前PHP解析器的版本号

4 PHP_OS:执行当前PHP解析器的操作系统名称

3.3.2 变量的作用范围

PHP中的变量用一个美元符号后面跟变量名来表示,变量名是区分大小写的。变量名与PHP中的其他标签一样遵循相同的规则。一个有效的变量名由字母或者下画线开头,后面跟上任意数量的字母、数字或者下画线。变量名中可以包含中文,不过不建议使用含有中文的变量名,因为在不同的网络上传输时会产生错误。

在命名变量时,应该使用易于辨认、有实质意义的字符串,比如:$name、$color等。

变量赋值有两种方式,传值赋值和引用赋值。

传值赋值是将一个表达式的值赋予一个变量。一般情况下,使用=进行传值赋值。也可以使用定界符<<<将字符串赋值给一个变量。例如:

                    $name="Yao Ming";
                    $sum=123+456;
                    $str_ A= <<<EOD白日依山尽,\n黄河入海流。\n欲穷千里目,\n更上一层楼。EOD;

这种赋值方式将整个原始表达式的值传到目标变量。用这种方式将源变量的值赋予目标变量时,改变其中目标变量的值,将不会影响到源变量的值。源变量和目标变量在存储系统中是互相独立的,传值赋值实际上在存储系统中执行了复制操作,如图3-4所示。

图3-4 传值赋值的变量值变化示意图

引用赋值是新变量简单地引用了原始变量,换言之,新变量成为了原始变量的别名或者指向了原始变量,意味着没有执行复制操作,它们的值或内容在存储系统中位于同一位置。这样,改动新的变量将影响到原始变量,反之亦然。因而,这种赋值操作更加快速。

引用赋值使用专门的操作符&,如图3-5所示。

图3-5 引用赋值的变量值变化示意图

                          echo $name2;           //输出显示:My name is Tom
                          echo $name1;           //输出显示:My name is Tom

只有确定名字的变量才可以引用赋值,其他情况将会发生错误。

例如:

        $sum=&(123+456);  //错误
        function dollar()
        {
          return 7.89;
        }
        $a=&dollar();   //错误

当一个变量的值是另一个变量的变量名时,这个变量称为可变变量或动态变量。

例如:

        $height=182;
        $tom_height="height";
        echo $$tom_height;  //相当于$height,显示182

变量的作用范围也就是它的生效范围,范围跨度是定义这个变量的PHP文件。包含了在PHP文件中使用include和require引入的文件。例如:

        $a = 1000;
          include 'b.php';

这里变量$a将会在包含文件b.php中生效,可以使用。

若变量是在用户自定义函数中定义的,那么默认情况下将被限制在局部函数范围内。

例如:

        $a =1000;
          function Test()
          {
          echo $a;  //此句不会有任何输出
          echo global $a;  //此句会输出1000
          }
          Test();

上述程序中用户自定义函数的第1句不会有输出,因为在Test()范围内没有定义变量$a。而第2句会输出1000,是因为在$a前加上了关键字global,使用了函数外定义的变量$a。

使用关键字global定义的变量被称为全局变量,可以在定义该变量的范围外使用。同样,可以在用户自定义函数范围内用关键字global指向函数范围外的变量使用。

例如:

        function Test()
            {
            global $a=1000;
            }
            Test();
            $b=$a+1000;
            echo $b;  //$b的值等于2000
          $a=123;
              $b=456;
              function Sum()
                {
                global $a, $b;
                $b=$a+$b;  //$b的值等于123+456,即579
              }
              Sum();
              echo $b;  //显示579

全局范围内访问变量的另一个办法,是PHP预定义变量中的超全局变量$GLOBALS数组。$GLOBALS数组包含一个引用,该引用指向每个当前脚本程序的全局范围内有效的变量。该数组元素的键名为全局变量的名称。

例如:

              $a=123;
                $b=456;
                function Sum()
                {
                $GLOBALS['b']=$GLOBALS['a']+$GLOBALS['b'];
                }
                Sum();
                echo $b;  //输出579

3.3.3 变量的生存期

变量的生存期是指变量可供使用的时间段。形象地讲,变量的生存期就是变量的“寿命”。变量在其生存期内都是有效的,超过其生存期,变量将会失效,这时变量不再存在,也就不能访问到该变量的值。

用户自定义函数在执行时所产生的变量,在函数结束时就消失了。有时因为程序的需要,当不希望变量在每次执行完函数就消失时,这种情况需要使用静态变量。定义静态变量的关键字是static。

例如:

                function Test()
                {
                    static $a=0;
                    echo $a;
                    $a++;
                }
                Test();
                Test();

因为将$a定义为静态变量,所以每次调用Test()函数都会输出$a的值并加一。

全局变量的生存期仅限于定义其自身的程序文件中,当程序文件执行结束或被关闭后,全局变量也就消失了。

静态变量的作用范围和局部变量相同,而生存期和全局变量相同。

3.3.4 预定义变量

PHP提供了大量的预定义变量,也叫系统变量。许多预定义变量依赖于运行的服务器的版本和PHP配置文件的设置。

使用phpinfo()函数可以查看当前PHP环境中的系统变量及其具体值,如表3-3所示。

表3-3 PHP变量

续表