我刚注意到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;'
有人用它做过什么吗?我想不出任何可能的用法...
加了:
问题的主要思想是:
使用(unset)$smth
代替NULL
的原因是什么?
答案 0 :(得分:16)
据我所知,使用
毫无意义$x = (unset)$y;
结束
$x = NULL;
(unset)$y
始终评估为null,与调用unset($y)
不同,强制转换根本不会影响$y
。
唯一的区别是,如果未定义$y
,使用强制转换仍会生成“未定义变量”通知。
关于相关问题有一个PHP bug。该错误实际上是关于(在我看来)文档中其他地方的误导性文章:
将变量转换为null将删除变量并取消设置其值。
显然事实并非如此。
答案 1 :(得分:7)
我猜(知道PHP并且它是不可靠的......对于不同的事情有趣的选择,我可能完全错了),因为这样的值不需要设置为var。出于确切的原因将它用于代码,我想不出一个例子,但是这样的事情:
$foo = bar((unset) baz());
你想要或者需要将null作为bar的参数,并且仍然需要调用baz()
。函数的语法已经改变,有人做了一个鸭子磁带修复,就像PHP似乎很热。
所以我要说:没有理由在经过深思熟虑的架构中使用它;可能会用于那些模糊不清的解决方案,我会先投票反对它们。
答案 2 :(得分:1)
例如,它可以像这样使用
function fallback()
{
// some stuff here
return 'zoo';
}
var_dump(false ? 'foo' : fallback()); // zoo
var_dump(false ? 'foo' : (unset) fallback()); // null
即使fallback()
返回“zoo”(unset)
也会清除该值。