PHP-php 对于变量的 static 和 global 定义是以 references 的方式实现的问题

PHP-php 对于变量的 static 和 global 定义是以 references 的方式实现的问题

泛泛之交 发布于 2017-10-10 字数 337 浏览 1076 回复 2
<?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);
?>

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泛泛之交 2017-10-15 2 楼

说下我的理解,即便在C++中,$obj = &new stdclass;这种方式也是会先创建一个副本,用于临时存放new的对象。而其是有作用域的,过了后边的}就没有意义了,一次test_global_ref();为null

清晨说ぺ晚安 2017-10-12 1 楼

new stdclass;是一个函数内部变量,生命周期只在函数内部.所以指向这块内存的指针在离开函数外是不存在的,这个对象的生命周期是随着函数的结束而结束的,所以在函数外面就为NULL了。
$obj = &new stdclass,我们可以理解为先创建对象stdclass,然后把地址付给变量obj:

等于
$t = new stdclass;
$obj = &$t;
所以$tmp 是内部变数而$obj指向$tmp,因此function 完结后, $obj会指向被清空的$tmp