如何在PHP中定义一个空对象

5 浏览
0 Comments

如何在PHP中定义一个空对象

使用一个新的数组,我可以这样做:

$aVal = array();
$aVal[key1][var1] = "something";
$aVal[key1][var2] = "something else";

是否有相似的语法用于对象?

(object)$oVal = "";
$oVal->key1->var1 = "something";
$oVal->key1->var2 = "something else";

admin 更改状态以发布 2023年5月21日
0
0 Comments

创建一个“空”对象的标准方法是:

$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",
  ],
];

0
0 Comments

$x = new stdClass();

一篇PHP官方文档中的评论最好地总结了这个问题:

stdClass是默认的PHP对象。
stdClass没有属性、方法或者父类。它不支持魔术方法,也不实现任何接口。

当你将标量或数组转换为对象时,你会得到一个stdClass的实例。你可以在需要通用对象实例的时候使用stdClass。

0