当变量看起来是一个数组而不是一个对象时,奇怪的stdClass为数组错误

时间:2015-11-22 11:57:42

标签: php arrays stdclass

我发现了一些可以修复问题的内容: 如果我返回$this->_data而不是$this->_data[0] - 然后使用$object->data()[0],它会按预期工作...但是,我想在函数中返回[0]。

在您开始说这是重复之前 - 此问题与此错误的大多数其他问题不同。

尝试访问班级$this->_data[0]时出现以下错误:

Cannot use object of type stdClass as array

这是触发错误的函数/行:

  public function data(){
      return $this->_data[0]; //<- line 75
  }

根据我的理解,当我尝试使用对象时会发生此错误,因为我会使用数组。但是,当我var_dump($this->_data)时,我得到以下结果:

array(1) {
    [0]=> object(stdClass)#34 (10) { 
        ["uid"]=> string(1) "0"
        ["nid"]=> string(3) "374"
        ["id"]=> string(8) "YicnaxYw"
        ["txt_content"]=> NULL
        ["path"]=> string(32) "/uploads/images/png/YicnaxYw.png"
        ["image"]=> string(1) "1"
        ["timestamp"]=> string(10) "1448192959"
        ["file_ext"]=> string(3) "png"
        ["file_type"]=> string(9) "image/png"
        ["originalFilename"]=> string(23) "2015-11-22_12-49-17.png"
    }
}

显然,此变量属于array(1)类型且带有[0]元素..

有人能告诉我我做错了吗?

提前致谢。

@Xeli $this->_data[0]->nid导致相同的错误


致命错误:无法在 /home3/ramzes/includes/classes/UploadItem.php 75
中使用stdClass类型的对象作为数组/>

UploadItem.php:75

  public function data(){
      return $this->_data[0]->nid;
  }

$this->_data[0]是一个fetchAll(PDO::FETCH_OBJ)对象,其中包含查询结果

3 个答案:

答案 0 :(得分:0)

编辑:

我在http://ideone.com/66I3wO设置了一个测试 - 我将你的对象存储在一个数组中,我可以访问$ this-&gt; _data [0] - &gt; nid就好了。

<?php

class Test
{
    public $_data = [];

    public function __construct() {
        $this->_data[0] = (object) [
            'uid' => '0',
            'nid' => '374',
            'id' => 'YicnaxYw',
            'txt_content' => null,
            'path' => '/uploads/images/png/YicnaxYw.png',
            'image' => '1',
            'timestamp' => '1448192959',
            'file_ext' => 'png',
            'file_type' => 'image/png',
            'originalFilename' => '2015-11-22_12-49-17.png'
        ];
    }

    public function data(){
        return $this->_data[0];
    }
}

$test = new Test();

echo $test->_data[0]->nid;

var_dump( $test->data() );

答案 1 :(得分:0)

我认为PDO会返回一个通过以下方式实现的对象:http://php.net/manual/en/class.iteratoraggregate.php

当你var_dump它时,它看起来像一个数组,但它不是。

您可以将数据功能更改为:

function data() {
    foreach($this->_data as $data) {
        return $data;
    }
}

答案 2 :(得分:0)

如果显式转换为数组,则可以按以下方式访问索引:

$return = (array) $this->_data;
return $return[0];