能够在PHP中为空变量分配属性-这是预期的行为吗?

能够在PHP中为空变量分配属性-这是预期的行为吗?,php,casting,Php,Casting,这些天我不得不修复一个bug,偶然发现了一个很容易复制的东西: $ php -a > $test = null; > $test->prop = 'value'; > print_r($test); stdClass Object ( [prop] => 'value' ) 在控制台上,它显示一些警告,但没有错误null只是隐式转换为stdClass对象 这是记录在案的预期行为,还是我这里出了什么问题?为什么会这样?“从空值创建默认对象”是一项功能,而不是

这些天我不得不修复一个bug,偶然发现了一个很容易复制的东西:

$ php -a
> $test = null;
> $test->prop = 'value';
> print_r($test);
stdClass Object
(
    [prop] => 'value'
)
在控制台上,它显示一些警告,但没有错误
null
只是隐式转换为
stdClass
对象


这是记录在案的预期行为,还是我这里出了什么问题?为什么会这样?

“从空值创建默认对象”是一项功能,而不是一个bug…如果您根本不声明
$test
,它的工作原理是一样的
null
相当于PHP关心的大多数意图和目的的“empty”(除非它不关心),因此在这种情况下为空值创建默认对象并不奇怪。这是不是一个很好的想法值得商榷。显然,这符合我眼中的php逻辑:它试图隐式地允许事情发生。例如,还可以通过简单地为对象指定值来定义动态特性。这里的操作也是如此:您的语法表示:我想给对象属性赋值。因为
$test
不是一个对象,所以php创建了一个对象。这只是一种动态的方法。如果它是“有争议的”,那么什么是赞成的论点?蟋蟀,蟋蟀…@philipp如果你想讨论设计敏感性,你选择了错误的语言来争论。-——说真的,事情就是这样。有人认为这是个好主意。我们今天就接受它。