我刚刚注意到PHP有一个类型转换(unset),我想知道它可能用于什么.它甚至没有真正取消设置变量,它只是将其转换为NULL,这意味着它(unset)$anything应该与简单编写完全相同NULL.
# Really unsetting the variable results in a notice when accessing it
nadav@shesek:~$ php -r '$foo = 123; unset($foo); echo $foo;'
PHP Notice: Undefined variable: foo in Command line code on line 1
PHP Stack trace:
PHP 1. {main}() Command line code:0
# (unset) just set it to NULL, and it doesn't result in a notice
nadav@shesek:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;'
Run Code Online (Sandbox Code Playgroud)
有人用过它吗?我想不出任何可能的用法......
补充:
问题的主要思想是:使用
什么理由(unset)$smth而不仅仅是NULL?
Joh*_*ess 17
据我所知,使用真的没有意义
$x = (unset)$y;
Run Code Online (Sandbox Code Playgroud)
过度
$x = NULL;
Run Code Online (Sandbox Code Playgroud)
将(unset)$y始终计算为空,而不像打电话unset($y),投不影响$y的.
唯一的区别是如果未定义,使用强制转换仍会生成"未定义变量"通知 $y.
有关于相关问题的PHP错误.该错误实际上是关于(在我看来)文档中其他地方的误导性文章,其中说:
将变量转换为null将删除变量并取消设置其值.
而事实显然并非如此.
我猜(知道PHP并且它是不可思议的......对于不同的事情有趣的选择,我可能完全错了),因为这个值不需要设置为var.出于确切的原因将它用于代码,我想不出一个例子,但是像这样:
$foo = bar((unset) baz());
Run Code Online (Sandbox Code Playgroud)
在那里你想要或者需要将null作为bar的参数,并且仍然需要调用baz().函数的语法已经改变,有人做了一个鸭子磁带修复,就像PHP似乎很热.
所以我要说:没有理由在经过深思熟虑的架构中使用它; 可能会被用于那些模糊不清的解决方案,我首先会投票反对它们.