有人曾经使用过PHP的(未设置的)转换吗?

php
2022-08-30 18:34:59

我刚刚注意到PHP有一个类型转换到,我想知道它可能用于什么。它甚至没有真正取消设置变量,它只是将其转换为NULL,这意味着这应该与简单地编写完全相同。(unset)(unset)$anythingNULL

# 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;'

有人曾经用它来做任何事情吗?我想不出任何可能的用法...

补充:
问题的主要思想是:
使用(未设置)$smth而不仅仅是NULL的原因是什么?


答案 1

据我所知,使用真的没有意义

$x = (unset)$y;

$x = NULL;

总是计算为 null,与调用 不同,强制转换完全不影响。(unset)$yunset($y)$y

唯一的区别是,如果未定义,则使用强制转换仍将生成“未定义的变量”通知。$y

有一个关于相关问题的PHP错误。这个错误实际上是关于(在我看来)文档中其他地方的误导性段落,其中说:

将变量强制转换为 null 将删除该变量并取消设置其值。

显然,事实并非如此。


答案 2

我猜(知道PHP,这是公证的...对于不同事物的有趣选择,我可能完全错了)这是为了使值不需要设置为var。出于将其用于代码的确切原因,我想不出一个示例,但如下所示:

$foo = bar((unset) baz()); 

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

所以我想说:没有理由在经过深思熟虑的建筑中使用它;可能用于那些如此晦涩难懂的解决方案,以至于我首先会投票反对它们。


推荐