如果我在函数内给一个没有声明为全局变量的变量赋值,那么当函数执行完毕时这个变量会自动取消定义吗?还是只有在 PHP 脚本执行完毕后才会取消定义?
我正在尝试确定手动取消函数作用域内的临时变量是否比不担心,因为它们将由 PHP 引擎自动取消定义更加明智。
我正在尝试确定手动取消函数作用域内的临时变量是否比不担心,因为它们将由 PHP 引擎自动取消定义更加明智。
除非变量有外部引用使其保持“活着”的状态,否则在函数退出时将取消变量。变量所占用的实际内存是否释放完全取决于垃圾收集器。GC是一项昂贵的操作,PHP仅在需要时(例如内存不足)才会调用它。
$a = &$a;
不再会在内存中“卡住”该变量。 - Marc B这完全取决于函数的范围。理论上,您可以在一个函数的范围内运行整个脚本(希望是调用其他函数的函数,但仍然...)。
对于具有最小副作用的合理大小的函数,保留对象设置是完全可以的--它们的析构函数将在函数完成时被调用(这是unset的第二个效果),并且它们将在函数完成后的第一次清理周期中进行清理。对于涉及创建大量对象的较大函数,则最好手动删除对象。
Zend引擎会为您进行清理,根据需要递减引用计数。