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

she*_*sek 23 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;'
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将删除变量并取消设置其值.

而事实显然并非如此.


Sma*_*mar 7

我猜(知道PHP并且它是不可思议的......对于不同的事情有趣的选择,我可能完全错了),因为这个值不需要设置为var.出于确切的原因将它用于代码,我想不出一个例子,但是像这样:

$foo = bar((unset) baz()); 
Run Code Online (Sandbox Code Playgroud)

在那里你想要或者需要将null作为bar的参数,并且仍然需要调用baz().函数的语法已经改变,有人做了一个鸭子磁带修复,就像PHP似乎很热.

所以我要说:没有理由在经过深思熟虑的架构中使用它; 可能会被用于那些模糊不清的解决方案,我首先会投票反对它们.

  • 我不知道为什么你想要以这种方式链接函数调用,如果你总是想首先将`null`传递给`bar` ... (3认同)