【问题标题】:PHP 'stdClass not an object'PHP 'stdClass 不是对象'
【发布时间】:2013-05-12 14:13:43
【问题描述】:

通过 mysqli::fetch_object(所有 PHP5)从 MySQL 数据库中获取行作为对象,它们在 上看起来像这样var_dump

class stdClass#5 (5) {
  public $id =>
  string(2) "23"
  public $started =>
  NULL
  public $finished =>
  NULL
  public $mode =>
  string(3) "XML"
  public $mail =>
  string(0) ""
}

现在开始这样做:

    public function __construct($export) {
        var_dump($export);
        if (!($export instanceof stdClass)) {
//throw new exception ...
}

或者这个

public function __construct(stdClass $export) {
        var_dump($export);
//...

甚至is_object($export) - 失败

我实际上得到了一个例外:

Fatal error: Uncaught exception 'Exception'
with message '$export is not an object'

Argument 1 passed to ConverterXML::__construct()
must be an instance of stdClass, none given
  1. 为什么
    • 甚至更好 -
  2. 如何查看天气 $export 是 mysqli fetch_object 的匿名类?

【问题讨论】:

  • 嗯...3v4l.org/MJtWp?你确定你真的在传递一些东西/正确的东西吗? “None given”似乎另有说明。
  • 参见fetch-object 手册,您可以设置class_name 但如果未指定,则返回stdClass 对象。
  • var_dump 显示 $export 包含的内容多于“无”。它实际上包含一个 stdClass。
  • 你能发布你的整个代码吗?您似乎得到了一个对象数组,但是如果不查看 如何 准确地获取数据,就很难判断。
  • 如果您使用命名空间,那么您必须使用\stdClass 而不是stdClass。也许这就是你的问题。

标签: php class object stdclass


【解决方案1】:

应该没有问题,如果你这样做是正确的:

$result = $mysqli->query($query);
while ($obj = $result->fetch_object()) {
    var_dump( $obj );
    var_dump( $obj instanceof stdClass );
    var_dump( is_object( $obj ) );
}

或者,如果您想要与 stdClass 不同的对象的实例:

class Employee {
    public function __construct( $id ) {
        $this->id = $id;
    }
}
$i = 0;
while ( $obj = $result->fetch_object( "Employee", array( $i ) ) ) {
    var_dump( $obj );
    $i++;
}

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 2021-01-19
    • 2014-02-28
    • 1970-01-01
    • 2016-03-14
    • 2013-04-23
    • 2014-10-29
    • 2010-11-22
    相关资源
    最近更新 更多