【发布时间】: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_object 是 true。为什么if 语句中会突然发生变化?
PHP 是不是很有趣,还是我做错了什么?
【问题讨论】:
-
var_dump 递归地探索数组和对象。也许它会尝试显示对象的“非对象”属性的值?如果你只是在 id 上调用 echo 而不是 var_dump 会发生什么?
-
我认为
Model_Artist内部有一个名为__toString()的魔术方法,当尝试回显或打印任何值时会调用此方法。当您尝试var_dump时,它会失败。 -
您使用的是哪个版本?我试图重现,但没有成功。
-
即使没有
var_dump或echo也会显示错误,只要获取$b->id就会触发非对象错误。感谢您的建议。我使用 PHP 5.4 和 FuelPHP 1.6。