您的位置: 飞扬精品软件园 >> 文章中心 >> 软件使用 >> 程序开发 >> PHP变量详解

相关文章链接

本类文章排行

最新新闻资讯

    PHP变量详解

    PHP变量详解


    • 阅览次数: 文章来源: 原文作者: 整理日期: 2010-07-23


    全局和静态变量的引用

    在 Zend 引擎 1 代,驱动了 PHP4,对于变量的 static 和 global 定义是以 references 的方式实现的。例如,在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用。这有可能导致预料之外的行为,如以下例子所演示的:

    <?php
    function test_global_ref() {
       global $obj;
       $obj = &new stdclass;
    }
    
    function test_global_noref() {
       global $obj;
       $obj = new stdclass;
    }
    
    test_global_ref();
    var_dump($obj);
    test_global_noref();
    var_dump($obj);
    ?>
    

    执行以上例子会导致如下输出:

    NULL
    object(stdClass)(0) {
    }
    

    类似的行为也适用于 static 语句。引用并不是静态地存储的:

     

    <?php
    function &get_instance_ref() {
       static $obj;
    
       echo "Static object: ";
       var_dump($obj);
       if (!isset($obj)) {
           // 将一个引用赋值给静态变量
           $obj = &new stdclass;
       }
       $obj->property++;
       return $obj;
    }
    
    function &get_instance_noref() {
       static $obj;
    
       echo "Static object: ";
       var_dump($obj);
       if (!isset($obj)) {
           // 将一个对象赋值给静态变量
           $obj = new stdclass;
       }
       $obj->property++;
       return $obj;
    }
    
    $obj1 = get_instance_ref();
    $still_obj1 = get_instance_ref();
    echo "\n";
    $obj2 = get_instance_noref();
    $still_obj2 = get_instance_noref();
    ?>
    

    执行以上例子会导致如下输出:

    Static object: NULL
    Static object: NULL
    
    Static object: NULL
    Static object: object(stdClass)(1) {
      ["property"]=>
      int(1)
    }
    

    上例演示了当把一个引用赋值给一个静态变量时,第二次调用&get_instance_ref() 函数时其值并没有被记住。

    可变变量

    有时候使用可变变量名是很方便的。就是说,一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如:

    ?<php
    $a = "hello";
    ?>
    

    一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。在上面的例子中 hello 使用了两个美元符号($)以后,就可以作为一个可变变量的变量了。例如:

    <?php
    $$a = "world";
    ?>  
    

    这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,可以表述为:
     

    <?php
    echo "$a ${$a}";
    ?>  
    

    以下写法更准确并且会输出同样的结果:

    <?php
    echo "$a $hello";
    ?> 
    

    它们都会输出:hello world。

    要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下 $$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。

    注意可变变量不能用于 PHP 的超全局变量数组。这意味着不能这样用:${$_GET}。 如果想要一种处理超全局变量和老的 HTTP_*_VARS 的方法,应该尝试引用它们。 

    [1] [2] [3] [4] [5]


查看所有评论

网友对PHP变量详解的评论

网名:
主题:
内容:
验证码: