有人曾经使用PHP(未设置)投射吗?

时间:2011-08-16 16:54:44

标签: php

我刚注意到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的原因是什么?

3 个答案:

答案 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)也会清除该值。