![]() |
1
11
他们会做一些稍微不同的事情:
在旧的php中,当ref计数降到0时,将调用析构函数并立即释放内存。在较新的版本(>=5.3)中,php使用缓冲方案,该方案对循环引用有更好的处理( http://www.php.net/manual/en/features.gc.collecting-cycles.php ,所以内存可能会在以后释放,但可能根本不会延迟…无论如何,这并不会真的导致任何问题,新算法可以防止某些内存泄漏。 如果变量名不再使用,unset应该快一些cpu周期(因为不需要创建新内容)。但是如果重新使用变量名,php将不得不创建一个新的变量和符号表条目,因此速度可能会慢一些!在大多数情况下,差异可以忽略不计。 如果要将变量标记为无效以便以后检查,可以将其设置为false或null。这比使用isset()进行测试要好,因为变量名中的输入错误将返回false而不会出现任何错误…您还可以将false和null值传递给另一个函数并保留sentinel值,这是使用unset var无法完成的…… 所以我要说:
或
检查哨兵值比
|
![]() |
2
2
技术上
因为它仍然是“set”,所以它只是被设置为en空值。 然而,它将回到
因为它是一个空变量。这取决于你在检查什么。通常人们倾向于检查变量是否是集,而不是它是否是空的。 所以最好把它完全解除。 而且,这更容易理解
比这个
第一个立即告诉您变量不再被设置。当后者简单地告诉你它被设置为一个空白。当您要向变量中添加内容,并且不希望出现php错误时,通常会使用此选项。 |
![]() |
3
2
你在做不同的事情
如果您关心性能,设置变量为
在
|
![]() |
4
2
我认为最相关的区别是,取消设置一个变量表示该变量不会被后续代码使用(如果您尝试使用它,它还通过报告一个e_通知来“强制”这个变量,正如jspcal所说,这是因为它不再在符号表中)。 因此,如果空字符串是合法(或sentinel)值,无论您对变量执行什么操作,请继续并将其设置为“”。否则,如果该变量不再有用,则取消设置该变量会使代码意图更清晰。 |
![]() |
5
0
它们有完全不同的含义。前者使变量不存在。后者只是将其值设置为空字符串。可以说,哪一个“更好”并不重要,因为它们代表完全不同的东西。 你是想清理记忆还是什么?如果是的话,不要这样做;php为您管理内存,这样您就可以让它到处乱放,它将自动被清理。 如果你不想清理内存,那么你需要找出 为什么? 您希望取消设置变量或将其设置为空,然后选择适当的变量。一个很好的检查:假设有人在您的unset/empty之后插入了以下代码行:
然后,稍后:
第一个将运行
|
![]() |
6
0
这里还有另一个问题需要考虑,那就是参考文献。 如果你有:
那么做你的两个选择是完全不同的。
将$variable和$a都设置为空字符串,其中
从符号表中删除$variable时,删除$a和$variable之间的引用链接。这确实是取消$a和$variable链接而不设置$variable来引用其他内容的唯一方法。注意,例如,$variable=null;不会这样做。 |
![]() |
danny · 如何使数组或映射返回变量(而不是其值) 1 年前 |
![]() |
Sher Meen · 我需要列出一个循环中临时变量中存储的多个值 2 年前 |
![]() |
Noah Hellyer · 如何删除python中7个字符长的所有零 2 年前 |
![]() |
Gabbisen · 从列表编辑变量(不能使用字典) 3 年前 |
![]() |
cred · 为什么我请求的变量在从另一个类调用时显示为0.0? 3 年前 |
|
lorny · R循环中的自动递增变量名 7 年前 |