• 迎丰收 晒丰收 庆丰收 2018-10-15
  • “捂脸表情”被注册成商标?申请人不认为商标侵权 2018-10-15
  • 战巡南海、绕岛巡航…空军有“飞出去”的主心骨 2018-10-14
  • 幼儿园要求家长写一万字读后感:不能这样玩家长|幼儿园|家长-教育时讯 2018-10-13
  • 中国故宫文物展在希腊举行 2018-10-13
  • 車·晓 第26期 車企官方降价真相幾何? 2018-10-12
  • 宝沃总裁杨嵩:曾和奔驰宝马同水平 已不能同日而语 2018-10-11
  • 新时代党员干部要有更大的担当和作为 2018-10-10
  • “2018-雷霆”专项行动破获百余起台湾间谍案 2018-10-09
  • 朝韩首脑今起在平壤会晤 “金文会”将聚焦三大议题 2018-10-09
  • 2018顺义啤酒节--北京频道--人民网 2018-10-08
  • 台湾遭遇的“断交潮”有无化解之道? 2018-10-08
  • 习近平会见爱沙尼亚总统卡柳莱德 2018-10-08
  • 中国空间站研制建设正有序开展 坚持和平利用 2018-10-07
  • Idlib to further divide Ankara and Moscow 2018-10-06
  • PHP变量详解

    栏目: 编程语言 发布于: 2014-05-26 13:07:04

    基础

    PHP 中一个美元符号后面跟上一个变量名称,即表示一个变量。变量的名称是对大小写敏感的。

    变量名与 PHP 中其它的标签一样遵循相同的规则。一个有效的变量名由字母或者下划线开头,后面跟上任意数量的字母,数字,或者下划线。按照正常的正则表达式,它将被表述为:'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

    注: 字母为 a-z,A-Z,ASCII 字符从 127 到 255(0x7f-0xff)。 
     

    <?php
    $var = "Bob";
    $Var = "Joe";
    echo "$var, $Var";      // outputs "Bob, Joe"
    
    $4site = 'not yet';    // invalid; starts with a number
    $_4site = 'not yet';    // valid; starts with an underscore
    $t?yte = 'mansikka';    // valid; '洄 is (Extended) ASCII 228.
    ?> 
    

    PHP 3 中,变量总是传值赋值。那也就是说,当你将一个表达式的值赋予一个变量时,整个原始表达式的值被赋值到目标变量。这意味着,例如,当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。有关这种类型的赋值操作,请参阅表达式一章。

    PHP 4 提供了另外一种方式给变量赋值:传地址赋值。这意味着新的变量简单的引用(换言之,“成为其别名” 或者 “指向”)了原始变量。改动新的变量将影响到原始变量,反之亦然。这同样意味着其中没有执行复制操作;因而,这种赋值操作更加快速。尽管如此,任何提速的操作只有在紧密循环或者大数组或者对象才可能被注意到。

    使用传地址赋值,简单地追加一个(&)符号到将要赋值的变量前(源变量)。例如,下列代码片断两次输出‘My name is Bob’:
     

    <?php
    $foo = 'Bob';              // Assign the value 'Bob' to $foo
    $bar = &$foo;              // Reference $foo via $bar.
    $bar = "My name is $bar";  // Alter $bar...
    echo $bar;
    echo $foo;                // $foo is altered too.
    ?>  
    

    需要注意的是只有命名变量才可以传地址赋值,这一点非常重要。

    <?php
    $foo = 25;
    $bar = &$foo;      // This is a valid assignment.
    $bar = &(24 * 7);  // Invalid; references an unnamed expression.
    
    function test()
    {
       return 25;
    }
    
    $bar = &test();    // Invalid.
    ?> 
    

    预定义变量

    PHP 提供了大量的预定义变量。由于许多变量依赖于运行的服务器的版本和设置,及其它因素,所以并没有详细的说明文档。一些预定义变量在 PHP 以命令行形式运行时并不生效。有关这些变量的详细列表,请参阅“保留的预定义变量”一章。

    警告
    PHP 4.2.0 以及后续版本中,PHP 指令 register_globals 的默认值为 off。这是 PHP 的一个主要变化。让 register_globals 的值为 off 将影响到预定义变量集在全局范围内的有效性。例如,为了得到 DOCUMENT_ROOT 的值,你将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替 $DOCUMENT_ROOT,又如,使用 $_GET['id'] 来代替 $id 从 URL http://www.rocksun.cn/test.php?id=3 中获取 id 值,亦或使用 $_ENV['HOME'] 来代替 $HOME 获取环境变量 HOME 的值。

    更多相关信息,请阅读配置项目 register_globals,有关安全性的一章使用 Register Globals,以及 PHP 4.1.0 和 4.2.0 的发行通告.

    请优先使用可用的 PHP 预定义变量,如 超级全局数组。

    从 PHP 4.1.0 开始,PHP 提供了一套附加的预定数组,这些数组变量包含了来自 Web 服务器(如果可用),运行环境,和用户输入的数据。这些数组非常特别,它们在全局范围内自动生效,例如,在任何范围内自动生效。为此,它们常因是 "autoglobals" 或者 "superglobals" 而闻名。(PHP 中尚且没有一种可使用户自定义超级全局变量的机制)超级全局变量罗列于下文中;但是为了得到它们的内容和关于 PHP 预定义变量的进一步的讨论以及它们的本质,请参阅预定义变量。而且,你也将注意到旧的预定义数组($HTTP_*_VARS)仍旧存在。自 PHP 5.0.0 起,冗长的 PHP 预定义变量可以通过设置 register_long_arrays 来屏蔽。

    可变变量: 超级全局变量不能被用作可变变量.

    如果某些 variables_order 中的变量没有设定,它们的对应的 PHP 预定义数组也是空的。
     

    PHP 超全局变量

    $GLOBALS

    包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键标为全局变量的 名称。从 PHP 3 开始存在 $GLOBALS 数组。

    $_SERVER

    变量由 Web 服务器设定或者直接与当前脚本的执行环境相关联。类似于旧数组 $HTTP_SERVER_VARS 数组(依然有效,但反对使用)。

    $_GET

    经由 HTTP GET 方法提交至脚本的变量。类似于旧数组 $HTTP_GET_VARS 数组(依然有效,但反对使用)。

    $_POST

    经由 HTTP POST 方法提交至脚本的变量。类似于旧数组 $HTTP_POST_VARS 数组(依然有效,但反对使用)。

    $_COOKIE

    经由 HTTP Cookies 方法提交至脚本的变量。类似于旧数组 $HTTP_COOKIE_VARS 数组(依然有效,但反对使用)。

    $_FILES

    经由 HTTP POST 文件上传而提交至脚本的变量。类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用)。详细信息请参阅 POST 方法上传。

    $_ENV

    执行环境提交至脚本的变量。类似于旧数组 $HTTP_ENV_VARS 数组(依然有效,但反对使用)。

    $_REQUEST

    经由 GET,POST 和 COOKIE 机制提交至脚本的变量,因此该数组并不值得信任。所有包含在该数组中的变量的存在与否以及变量的顺序均按照 php.ini 中的 variables_order 配置指示来定义。该数组没有直接模拟 PHP 4.1.0 的早期版本。参见 import_request_variables()。

    注意
     
    自 PHP 4.3.0 起,$_FILES 中的文件信息不再存在于 $_REQUEST 中。

    注: 当运行于命令行模式时,这个数组将不会包含 argv 和 argc 入口;它们已经存在于数组 $_SERVER 中。

    $_SESSION

    当前注册给脚本会话的变量。类似于旧数组 $HTTP_SESSION_VARS 数组(依然有效,但反对使用)。详细信息,请参照 Session 处理函数章节。

    变量范围

    变量的范围即它定义的上下文背景(译者:说白了,也就是它的生效范围)。大部分的 PHP 变量只有一个单独的范围。这个单独的范围跨度同样包含了 include 和 require 引入的文件。范例:

    <?php
    $a = 1;
    include "b.inc";
    ?> 
    

    这里变量 $a 将会在包含文件 b.inc 中生效。但是,在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。范例:

    <?php
    $a = 1; /* global scope */
    
    function Test()
    {
       echo $a; /* reference to local scope variable */
    }
    
    Test();
    ?>
    

    这个脚本不会有任何输出,因为 echo 语句引用了一个局部版本的变量 $a,而且在这个范围内,它并没有被赋值。你可能注意到 PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖。这可能引起一些问题,有些人可能漫不经心的改变一个全局变量。PHP 中全局变量在函数中使用时必须申明为全局。

    The global keyword

    首先,一个使用 global 的例子:

    使用 global

     

     
    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处。
    转载请注明:文章转载自 七星彩票平台
    本文标题:PHP变量详解
    IT技术书籍推荐:
    深入PHP:面向对象、模式与实践(第3版)
    深入PHP:面向对象、模式与实践(第3版)
    Mart Zandstra (作者), 陈浩 (译者), 吴孙滨 (译者), 胡丹 (译者), 李静 (译者)
    《深入PHP:面向对象、模式与实践(第3版)》是PHP专家经典力作的最新版本。书中主要介绍了如何使用面向对象技术和设计模式编写稳定的、可维护的代码,如何使用Subversion管理多个开发人员,如何使用Phing和PEAR进行构建和安装,以及将构建和测试过程自动化的策略,包括持续集成?!渡钊隤HP:面向对象、模式与实践(第3版)》适合中高级PHP程序员阅读。