课程咨询 :13623629309

太原PHP培训 > 达内新闻 > php中 global/static 的一个小陷阱的解释
  • php中 global/static 的一个小陷阱的解释

    发布:蝦米的技术手札      来源:蝦米的技术手札      时间:2016-11-18

  • php中 global/static 的一个小陷阱的解释

    php手册中,关于global/static变量有这么一段说明

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

    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) {

    }

    很多人也许会纠结为什么第一个会是 null ,并且开始纠结是不是因为用了过时(并且从php7开始已经被移除)的特性 Assigning the return value of new by reference 所导致的。然而事实并非如此,让我们把上面这个例子稍作改动:

    function test_global_ref() {

    global $obj;

    $b = 'xiami';

    $obj = &$b;

    }

    function test_global_noref() {

    global $obj;

    $b = 'xiami';

    $obj = $b;

    }

    test_global_ref();

    var_dump($obj);

    test_global_noref();

    var_dump($obj);

    这是一个在目前最新的php(php 7.0.13)下依然可以无任何错误运行的一段代码,它的第一个输出的结果依然是 null ,为什么?

    再回过头读一遍手册上的解释, 在一个函数域内部用 global 语句导入的一个真正的全局变量实际上是建立了一个到全局变量的引用 ,换言之 global $obj; $obj = &$GLOBALS['obj']; 是完全等价的

    好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:前端与PHP之间那点儿事(二)

下一篇:CmlPHP V2.7.2,快速稳定易维护的 PHP 框架福利

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-30

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-30

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-30

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-30

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统