检查stdClass对象是否在PHP中有"条目"

ipa*_*aus 39 php

我有一个模型,用于检查数据库中的条目.像这样:

public function getByID($id)
{
    if(false == is_numeric($id))
        return false;

    $images = array();

    $query = $this->db->where("id_album", $id)->order_by("order", "ASC")->get("images");

    foreach($query->result() as $row)
        $images[] = $row;

    return (object) $images;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,我想知道我是否有行,以显示图像与否.我这样做:

<?php if(false != isset($content->images)): ?>
    <pre><?php print_r($content->images); ?></pre>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

但每当我尝试跳过没有结果时(我得到stdClass()为空)我就失败了.我试过isset,$content->images != NULL,!$content->images...我不知道该怎么做,以跳过"严重性:通知消息:未定义的变量".

先感谢您.

更新:

$content有比图像更多的集合,如$content->_data$content->title.

当我在数据库上没有图像并且我没有从MySQL返回时,执行以下操作:

<?php echo count($content->images); ?>
<pre><?php print_r($content->images); ?></pre>
Run Code Online (Sandbox Code Playgroud)

输出是:

1
stdClass ( )
Run Code Online (Sandbox Code Playgroud)

Rob*_*itt 71

为什么你不能使用

if(isset($content->images)) //Isset also will make sure $content is set
{

}
Run Code Online (Sandbox Code Playgroud)

这样您可以对两个实体执行检查.

由于图像是可以迭代的对象,您也可以检查它.

if(isset($content->images) && is_object($content->images))
{

}
Run Code Online (Sandbox Code Playgroud)

你似乎也使用错误的比较运算符作为布尔值,你应该使用严格的比较标准,这是===和不是==,或者!==不是!=:)

圣诞节快乐


luc*_*ous 14

我知道这是一个老问题,但仍未得到妥善回答.

isset 测试密钥是否存在不是测试是否为空.这是一个重要的区别.请参阅示例:http://us1.php.net/isset

要正确测试数组是否包含密钥,请array_key_exists按照本页其他地方的说明使用.

另一方面,要测试对象是否包含属性,property_exists应使用该方法.即使属性具有值,也会property_exists()返回.TRUENULL

所以,你的代码看起来应该是这样的(是的,我改变了一点,但重点仍然相同):

<?php
    if ( isset( $content ) && property_exists( $content, 'images' ) ) {
        echo '<pre>' . print_r( $content->images, true ) . '</pre>';
    }
?>
Run Code Online (Sandbox Code Playgroud)


Dam*_*eem 6

在试图找出如何检查空的stdClass时,进入这个问题/答案.

给出的答案并不是主题中问题的真正答案,导致这里的人不会得到明确的答案,所以我将添加一个改进的版本:

问题: 检查stdClass对象是否在PHP中有"条目"

回答:

将stdClass转换为数组,见下文:

$someObject = new StdClass();
var_dump(empty($someObject)); // Will return false, because $someObject is an stdClass

// Convert to array
$someObjectArr = (array)$someObject;
var_dump(empty($someObjectArray)); // Will return true
Run Code Online (Sandbox Code Playgroud)