如何在PHP中定义一个空对象
如何在PHP中定义一个空对象
使用一个新的数组,我可以这样做:
$aVal = array(); $aVal[key1][var1] = "something"; $aVal[key1][var2] = "something else";
是否有相似的语法用于对象?
(object)$oVal = ""; $oVal->key1->var1 = "something"; $oVal->key1->var2 = "something else";
创建一个“空”对象的标准方法是:
$oVal = new stdClass();
但我个人更喜欢使用:
$oVal = (object)[];
它更短,并且我个人认为它更清晰,因为stdClass可能会让新手程序员感到困惑(即“嘿,我需要一个对象,而不是一个类!”...)
(object)[]
等价于new stdClass()
请参见PHP手册(这里):
stdClass:通过类型转换为对象创建。
以及这里:
如果将对象转换为对象,则不会修改对象。如果将任何其他类型的值转换为对象,则创建一个stdClass内置类的新实例。
以及这里(从PHP 7.3.0开始,var_export()
将对象导出为使用(object)
强制转换为数组的对象):
现在将stdClass对象导出为强制转换为对象的数组 ((object) array( ... )), 而不是使用不存在的方法stdClass::__setState()。实际效果是现在stdClass是可导出的,导出的代码甚至会在早期版本的PHP上工作。
但请记住,empty($oVal)返回false,正如@PaulP所说:
没有属性的对象不再被视为空。
关于你的例子,如果你写:
$oVal = new stdClass(); $oVal->key1->var1 = "something"; // this creates a warning with PHP < 8 // and a fatal error with PHP >=8 $oVal->key1->var2 = "something else";
PHP < 8将创建以下警告,隐式创建属性key1
(一个对象本身)
Warning: Creating default object from empty value
PHP> = 8将创建以下错误:
Fatal error: Uncaught Error: Undefined constant "key1"
在我看来,你最好的选择是:
$oVal = (object)[ 'key1' => (object)[ 'var1' => "something", 'var2' => "something else", ], ];
$x = new stdClass();
一篇PHP官方文档中的评论最好地总结了这个问题:
stdClass是默认的PHP对象。
stdClass没有属性、方法或者父类。它不支持魔术方法,也不实现任何接口。当你将标量或数组转换为对象时,你会得到一个stdClass的实例。你可以在需要通用对象实例的时候使用stdClass。