gpt4 book ai didi

php - 取消设置变量与设置为 ''

转载 作者:可可西里 更新时间:2023-11-01 12:29:33 24 4
gpt4 key购买 nike

执行以下操作是否更好?如果不是,其中一个比另一个快吗?

unset($variable);

或做

$variable = '';

最佳答案

他们会做一些稍微不同的事情:

  • unset 将从符号表中删除变量并将内容的引用计数减 1。之后对变量的引用将触发通知(“ undefined variable ”)。 (请注意,对象可以通过实现 __unset() 来覆盖其属性的默认取消设置行为)。

  • 设置为空字符串会将内容的引用计数减1,将内容设置为长度为0的字符串,但该符号仍会保留在符号表中,您仍然可以引用该变量. (注意,对象可以通过实现 __set() 来覆盖其属性的默认赋值行为)。

在较旧的 php 中,当引用计数降为 0 时,将调用析构函数并立即释放内存。在较新的版本(> = 5.3)中,php 使用缓冲方案,可以更好地处理循环引用(http://www.php.net/manual/en/features.gc.collecting-cycles.php),因此内存可能会在以后释放,但它可能根本不会延迟......在任何情况下,这不会真正导致任何问题,并且新算法可以防止某些内存泄漏。

如果不再使用变量名,unset 应该会快几个 cpu 周期(因为不需要创建新内容)。但是如果重新使用变量名,php 将不得不创建一个新的变量和符号表条目,所以它可能会更慢!在大多数情况下,差异可以忽略不计。

如果要将变量标记为无效以便以后检查,可以将其设置为 false 或 null。这比使用 isset() 进行测试要好,因为变量名中的拼写错误会返回 false 而不会出现任何错误...您还可以将 false 和 null 值传递给另一个函数并保留标记值,这是无法完成的一个未设置的变量...

所以我想说:

$var = false; ...
if ($var !== false) ...

$var = null; ...
if (!is_null($var)) ...

更适合检查哨兵值
unset($var); ...
if (isset($var)) ...

关于php - 取消设置变量与设置为 '',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2039867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com