设为首页 收藏本站
查看: 1062|回复: 0

[经验分享] PHP中的变量和常量

[复制链接]

尚未签到

发表于 2015-8-25 10:48:16 | 显示全部楼层 |阅读模式
  
摘自:http://www.qianyunlai.com/blog/216.html    
  
  PHP中的变量和常量

几乎所有的编程语言都会涉及到变量和常量这两个概念,PHP也不例外。本节将介绍PHP语言中的变量和常量的应用方法。
2.4.1  什么是变量和常量
在程序执行的过程中,变量存储的值可以随时改变,而常量存储的值是不可以改变的。
变量用于存储临时数据信息。某一变量被定义的时候,系统会自动为该变量分配一个存储空间存放变量的值。我们可以在定义变量的时候对其赋值,如果需要改动变量的值,只需再次对其进行赋值即可。对于那些临时数据信息或者处理过程,都可以存放在变量中。
常量用于存储不经常改变的数据信息。定义常量的时候可以对其赋值,在程序的整个执行期间内,这个赋值都有效且不可再次对该常量进行赋值操作。
2.4.2  变量的定义与赋值
在本章前面章节已经有很多示例代码中应用了变量,但我们还没有系统地讲解变量的应用。本节我们开始讲解如何在PHP中实现变量的定义与赋值操作。
1.变量的定义
在PHP中定义一个变量的语法格式如下:
$变量名称 = 变量的值
在为一个变量命名时,需要遵循以下命名规则:
l         变量名以字母或下画线开头,可以由字母、下画线或数字构成。
l         变量名区分大小写,“$var”和“$VAR”分别代表了两个不同的变量。
l         自定义变量名称不可与PHP提供的默认变量名称相同。
l         在为变量命名时,尽量使用有意义的字符串。
符合规定的变量命名如下:



$name;
$_password;
$no1;
  

不符合规定的变量命名如下:



$1book;
$*a;  

  2.变量的赋值

为变量赋值有两种方式:传值赋值和引用赋值,这两种赋值方式在对数据处理上存在很大差别。
1)传值赋值
这种赋值方式使用“=”直接将一个变量(或表达式)的值赋给另一个变量。使用这种赋值方式,等号两边的变量值互不影响,任何一个变量值的变化都不会影响到另一个变量。从根本上来说,传值赋值是通过在存储区域复制一个变量的副本来实现的。应用传值赋值的示例代码如下:



<?php
    $a = 33;
   
    $b = $a;
   
    $b = 44;
   
    echo "变量a的值为".$a."<br>";
   
    echo "变量b的值为".$b;
?>
  

在上面代码中,执行&#8220;$a = 33&#8221;语句时,系统会在内存中为变量a开辟一个存储空间,并将33这个数值存入到该存储空间。实现过程如图2-14所示。
执行&#8220;$b = $a&#8221;语句时,系统会在内存中为变量b开辟一个存储空间,并将变量a指向存储空间的内容复制到变量b所指向的存储空间。实现过程如图2-15所示。
DSC0000.jpg                          DSC0001.jpg
图2-14  开辟变量a的存储空间               图2-15  开辟变量b的存储空间
当执行&#8220;$b = 44&#8221;语句时,系统将变量b指向存储空间保存的值更改为44,而变量a指向存储空间保存的值仍然是33。实现过程如图2-16所示。
当代码2-14中的程序被执行时,得到结果如图2-17所示。
         DSC0002.jpg                 DSC0003.jpg
          图2-16  更改变量b的值                        图2-17  传值赋值方式
2)引用赋值
引用赋值同样是使用&#8220;=&#8221;将一个变量的值赋给另一个变量,但是需要在等号右边的变量前面加上一个&#8220;&&#8221;符号。实际上这种赋值方式并不是真正意义上的赋值,而是一个变量引用另一个变量。在使用引用赋值的时候,两个变量将会指向内存中同一存储空间,因此任何一个变量的变化都会引起另外一个变量的变化。应用引用赋值的示例代码如下:


<?php
   
    $a = 33;
   
    $b = &$a;
   
    $b = 44;
   
    echo "变量a的值为".$a."<br>";
   
    echo "变量b的值为".$b;
?>  

在上面代码中执行&#8220;$a = 33&#8221;语句时,对内存操作的过程与传值赋值相同,这里就不再说明了。执行&#8220;$b = &$a&#8221;语句后,变量b将会指向变量a所占有的存储空间。实现过程如图2-18所示。
执行&#8220;$b = 44&#8221;语句后,变量b所指向的存储空间保存的值变为44。此时由于变量a也指向此存储空间,所以变量a的值也会变为44。
当代码2-15中的程序被执行时,得到结果如图2-19所示。
          DSC0004.jpg                DSC0005.jpg
     图2-18  变量b指向变量a的存储空间                 图2-19  引用赋值方式
2.4.3  变量作用域
使用PHP语言开发的时候,我们几乎可以在任何位置声明变量,但是变量声明位置及声明方式的不同决定了变量作用域的不同。所谓的变量作用域,指的是变量在哪些范围能被使用,在哪些范围不能被使用。在PHP中,按照变量作用域的不同可以分为局部变量和全局变量。
1.局部变量
局部变量是声明在某一函数体内的变量,该变量的作用范围仅限于其所在函数体的内部。如果在该函数体外部引用这个变量,系统将会认为引用的是另外一个变量。
应用局部变量的示例代码如下:


DSC0006.gif DSC0007.gif 代码

<?php
function local(){
         $a = "local variable";      //在函数内部声明一个变量a并赋值

         echo "函数内部变量a的值为".$a."<br>";
}
local();      //调用函数local(),用来打印出变量a的值

$a = "outside variable.";  //在函数外部再次声明变量a并赋另一个值

echo "函数外部变量a的值为".$a;
?>  

该程序被执行时,得到结果如图2-20所示。

DSC0008.jpg
图2-20  局部变量的应用
2.全局变量
全局变量可以在程序的任何地方被访问,这种变量的作用范围是最广泛的。要将一个变量声明为全局变量,只需在这个变量前面加上&#8220;global&#8221;关键字(不区分大小写,也可以是GLOBAL)。使用全局变量,我们就能够在函数内部引用函数外部参数,或者在函数外部引用函数内部的参数了。
应用全局变量的示例代码如下:


代码

<?php
$a = "outside";             //定义一个变量a(注意:此时$a是全局变量)

function local(){          //定义一个函数local

         global $a;        //将变量a声明为全局变量

         echo "在local函数内部获得变量a的值为".$a."<br>";
         global $b;         //将变量b声明为全局变量

         $b = "inside";     //local函数内部对变量b进行赋值

}
local();     //输出local函数内部变量a的值

echo "在local函数外部获得变量b的值为".$b;   //在函数local外部输出变量b的值

?>
  

该程序被执行时,得到结果如图2-21所示。

DSC0009.jpg
图2-21  全局变量的应用



Note


应用全局变量虽然能够使我们更加方便地操作变量,但有的时候变量作用域的扩大,会给开发带来麻烦,可能会产生一些预料不到的问题。在通常情况下,我们不建议使用全局变量。

2.4.4  静态变量
变量不仅有其特定的作用范围,还有其存活的周期&#8212;&#8212;生命周期。变量的生命周期指的是变量可被使用的一个时间段,在这个时间段内变量是有效的;而一旦超出这个时间段变量将会失效,我们就不能够再访问到该变量的值了。
PHP对于变量的生命周期规定如下:
l         局部变量的生命周期为其所在函数被调用的整个过程。当局部变量所在的函数结束时,局部变量的生命周期也随之结束。
l         全局变量的生命周期为其所在&#8220;.php&#8221;脚本文件被调用的整个过程。当全局变量所在脚本文件结束调用时,全局变量的生命周期结束。
有时某个自定义函数结束后,我们希望该函数内的变量仍然存在,就需要将这个变量声明为静态变量。将一个变量声明为静态变量的方法为,在变量前面加&#8220;static&#8221;关键字。
应用静态变量的示例代码如下:


代码

<?php
function test(){
         static $a = 0;       //定义一个静态变量a,并赋初始值为0

         echo $a."<br>";     //输出变量a的值

         $a = $a+1;          //将变量a的值加1再次赋给变量a

}
test();   //调用函数test()

test();
test();
echo $a;  //变量a的生命周期结束,不会输出任何值

?>  

该程序被执行时,得到结果如图2-22所示。

DSC00010.jpg
图2-22  静态变量的应用
从上面得到的结果可以看出,每次调用函数test()的时候,变量a的值都会增加1。也就是说每次调用函数结束以后,变量a仍然存在。再次调用函数test()时,变量a的值将会使用上一次调用该函数后得到的值。同时从上面的例子我们也可以得出这样的结论,静态变量的作用范围与局部变量相同,但是生命周期与全局变量相同



Note


l          我们可以这样理解静态变量:只有该函数首次被调用时,取函数体内静态变量的初始值。以后再次调用该函数时,静态变量取值将是上次调用这个函数后得到的值。
l          在为静态变量赋初值时,不可以将一个表达式赋给这个静态变量。

2.4.5  可变变量
通过前面的介绍我们已经知道,在PHP中定义一个变量时,变量必须有一个固定的名称。实际上PHP还支持一种特殊的变量使用方式&#8212;&#8212;可变变量,这种变量的变量名称是由其他变量的值决定的,因此这个变量的名称是可变的。声明一个可变变量的语法格式如下:
$$可变变量的名称 = 可变变量的值
应用可变变量的示例代码如下:


代码

<?php
    $a = "Hello";              //定义一个变量a,并赋值为Hello

    $$a = "World";             //定义一个可变变量,该变量名称为变量a的值

    echo $a."<br>";            //输出变量a的值

    echo $$a."<br>";           //输出可变变量的值

    echo $Hello;              //输出可变变量值的另一种方式

?>  

该程序被执行时,得到结果如图2-23所示。

DSC00011.jpg
图2-23  可变变量的应用
2.4.6  默认系统变量
PHP提供了很多的默认系统变量,用于获得系统配置信息、网络请求相关信息等。PHP默认的系统变量的名称及其作用如表2-9所示。
表2-9  PHP默认系统变量

变    量
作    用
$GLOBALS
存储当前脚本中的所有全局变量,其KEY为变量名,VALUE为变量值
$_SERVER
当前Web服务器变量数组
$_GET
存储以GET方法提交表单中的数据
$_POST
存储以POST方法提交表单中的数据
$_COOKIE
取得或设置用户浏览器Cookies中存储的变量数组
$_FILES
存储上传文件提交到当前脚本的数据
$_ENV
存储当前Web环境变量
$_REQUEST
存储提交表单中的所有请求数组,其中包括$_GET、$_POST、$_COOKIE和$_SESSION中的所有内容
$_SESSION
存储当前脚本的会话变量数组
关于PHP所提供的默认系统变量,可以通过调用phpinfo()函数进行查看。但是由于操作系统版本、服务器版本及PHP配置文件的差异,在不同环境下显示的内容可能会有所不同。
2.4.7  常量的定义
在PHP中是通过define()函数来定义一个常量的,其语法格式为:
bool define ( string $name, mixed $value [, bool case_$insensitive] )
在上述语法中涉及到的参数说明如下。
l         name:指定常量的名称。
l         value:指定常量的值。
l         insensitive:指定常量名称是否区分大小写。如果设置为true则不区分大小写;如果设置为false则区分大小写。如果没有设置该参数,则取默认值false。
应用常量的示例代码如下:


代码

<?php
    define("COLOR","red");     //定义一个常量COLOR,值为red
   
    echo COLOR."<br>";        //输出常量COLOR的值
   
    echo color."<br>";        //不能正确输出常量COLOR的值
   
    define("SHAPE","round",TRUE);   //定义常量SHAPE,值为round,不区分名称大小写
   
    echo shape."<br>";             //输出常量SHAPE的值
   
    echo SHape;                    //输出常量SHAPE的值

?>
  

该程序被执行时,得到的结果如图2-24所示。

DSC00012.jpg
图2-24  常量的应用



Note


为常量命名的时候,同样需要遵循变量的命名规则,并且建议全部使用大写字母。另外,常量与变量的使用方法不同,使用常量的时候并不需要在常量前面加&#8220;$&#8221;符号。


2.4.8  默认系统常量
与默认系统变量一样,PHP也提供了一些默认的系统常量供用户使用。在程序中可以随时应用PHP的默认系统常量,但是我们不能任意更改这些常量的值。PHP中常用的一些默认系统常量名称及其作用如表2-10所示。
表2-10  PHP默认系统常量
常    量
作    用
__FILE__
存储当前脚本的(物理地址)绝对路径及文件名称
__LINE__
存储该常量所在行号
__FUNCTION__
存储该常量所在函数名称
__CLASS__
存储该常量所在类的名称
PHP_VERSION
存储当前PHP的版本号
PHP_OS
存储当前服务器的操作系统
  


  
  
  

  
  
  
  
  
  
  
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-103940-1-1.html 上篇帖子: PHP array_intersect_key() 下篇帖子: 彻底杜绝PHP的session,cookie,Cannot modify header错误
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表