zoukankan      html  css  js  c++  java
  • PHP 全局和静态变量的引用

    在 Zend 引擎 1 代,它驱动了 PHP4,对于变量的 staticglobal 定义是以引用的方式实现的。例如,在一个函数域内部用 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 "
    ";
    $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)
    }

  • 相关阅读:
    CUDA_获取指定设备
    CUDA_常量内存
    CUDA_全局内存及访问优化
    CUDA_共享内存、访存机制、访问优化
    CUDA_寄存器和局部存储器
    CUDA_存储器模型
    CUDA常用概念及注意点
    迅雷笔试题_红黑积木求和
    迅雷笔试题_素勾股数的个数
    【Spring源码分析】Bean的生命周期
  • 原文地址:https://www.cnblogs.com/holiphy/p/13928654.html
Copyright © 2011-2022 走看看