【问题标题】:Php says object is non-objectphp 说对象是非对象
【发布时间】:2013-09-02 20:58:17
【问题描述】:

对不起,这是另一个试图获取非对象的属性-问题...

这是一些代码,我似乎无法弄清楚它是如何工作的(或者 不是 而是工作):

$b = Model_Artist::query()->where('id', 18)->get_one(); // Fuelphp ORM query, returns \Orm\Model object

var_dump($b); // output: object(Model_Artist)[46] ...  etc.

// definitely an object


var_dump($b->id); // [Error: Trying to get property of non-object] output: '18'

// umm ok, so maybe no object?


var_dump(is_object($b)); // output: bool(true)

// no, no, it is an object!


var_dump($b->id); // [Error: Trying to get property of non-object] output: '18'

// make up your mind, it's no object after all?


if ( is_object($b) ) {
    var_dump($b->id); // output: '18'  [No error!!]
}

// WAT?? It is only an object inside the if statement?

所以问题是:为什么 PHP 说我在前两种情况下尝试获取 property of a non-object,而 is_objecttrue。为什么if 语句中会突然发生变化?

PHP 是不是很有趣,还是我做错了什么?

【问题讨论】:

  • var_dump 递归地探索数组和对象。也许它会尝试显示对象的“非对象”属性的值?如果你只是在 id 上调用 echo 而不是 var_dump 会发生什么?
  • 我认为Model_Artist 内部有一个名为__toString() 的魔术方法,当尝试回显或打印任何值时会调用此方法。当您尝试var_dump 时,它会失败。
  • 您使用的是哪个版本?我试图重现,但没有成功。
  • 即使没有var_dumpecho 也会显示错误,只要获取$b->id 就会触发非对象错误。感谢您的建议。我使用 PHP 5.4 和 FuelPHP 1.6。

标签: php object fuelphp


【解决方案1】:

$b 是一个对象数组。所以$b->id 无效,但reset($b)->id 有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 2017-11-09
    • 1970-01-01
    • 2013-05-12
    • 2016-07-23
    • 2012-09-03
    • 2017-08-15
    • 2012-05-29
    相关资源
    最近更新 更多