PHP 通过引用实现了变量的 static 和 global 修饰符。例如,使用 global 语句在函数作用域内导入的真正全局变量实际上创建了对该全局变量的引用。这可能会导致意外行为,以下示例将解决这一问题:
<?php function test_global_ref() { global $obj; $new = new stdClass; $obj = &$new; } function test_global_noref() { global $obj; $new = new stdClass; $obj = $new; } test_global_ref(); var_dump($obj); test_global_noref(); var_dump($obj); ?>
上面的例子将输出:
NULL object(stdClass)#1 (0) { }
网址:https://www.php.net/manual/en/language.variables.scope.php#language.variables.scope.references
我在php手册的变量作用域页面上找到了这个例子,但我不明白为什么第一个var_dump为空。我什至在test_global_ref函数中输出$obj。 $obj仍然有值,但是为什么在全局范围内输出$obj时它是null?
希望专业人士告诉我为什么为空
在第一个代码示例中,
$obj
设置为 a reference 到 $new
。当该函数结束时, $new
被清理(因为它不再处于任何主动运行的代码的范围内),使引用无处可去。
在第二个示例中,使用引用将
$obj
设置为 $new
without,因此 PHP 知道保留该值。