Php 为什么';t empty()在stdClass上工作

Php 为什么';t empty()在stdClass上工作,php,Php,我面临着这个困境,基本上,如果某个任务没有完成,我想创建一个错误对象。现在,为了理解我必须发送回用户的内容,我需要检查错误对象是空的还是有数据。问题是: $obj = new stdClass(); var_dump(empty($obj)); // returns false 如图所示,它返回的是false,而不是true,因为它是空的 这对于数组来说非常好,但是有人知道为什么对象会发生这种情况吗 我已经阅读了将其转换为数组的状态,但我的问题是: 为什么它为空时返回false?背后的逻辑

我面临着这个困境,基本上,如果某个任务没有完成,我想创建一个错误对象。现在,为了理解我必须发送回用户的内容,我需要检查错误对象是空的还是有数据。问题是:

$obj = new stdClass();
var_dump(empty($obj)); // returns false
如图所示,它返回的是
false
,而不是
true
,因为它是空的

这对于数组来说非常好,但是有人知道为什么对象会发生这种情况吗


我已经阅读了将其转换为数组的状态,但我的问题是:

为什么它为空时返回false?背后的逻辑是什么? 如果我想要一个数组,我会从它开始

从php.net:

以下内容被认为是空的:

"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)

您创建的每个对象都不会是“空的”。

另请参见:如果确实需要检查对象是否为空,只需将其转换为数组:
If(empty((array)$stdClass))
如果我是您,并且如果我对您所做的进行了编码,我将让我的对象实现方法
isEmpty()
,该方法将检查包含错误的属性。然后我可以使用OO方法,如果我已经在使用对象,我可以做
if($myObject->isEmpty())
或者更好的
if($myObject->hasrerrors())
。我不明白为什么会有人使用程序方法。避免设置地雷消除了所有设置地雷的可能性。@Darren-我们经常因为那些该死的树而错过森林,但咖啡应该会有帮助。无论如何,很高兴我能帮上一点忙:>这都很好,问题是关于
空的
构造和对象,所以提供的答案是回答这个问题,对于任何未来的谷歌用户来说,如果你在这里偶然发现,那么问我就好了。我可以帮你,不需要任何假想的分数:)
"" (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
"0" (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)