方法在那里,但我不能使用它?

时间:2012-06-30 00:56:14

标签: php

Fatal error: Call to a member function get() on a non-object

pr($transaction->invoice->get());

我收到了一个奇怪的消息。我知道方法确实存在,并且可以使用,甚至在使用之前进行了双重检查。这有什么不对?

pr(get_class_methods($transaction->invoice));
Array
(
    [0] => __construct
    [1] => get
    [2] => __toString
    [3] => getHref
    [4] => setHref
    [5] => _get
)

更新

var_dump(is_object($transaction->invoice));评估为bool(true)

这些方法都不起作用。我很困惑!我认为这是其中一个边缘案例。我正在使用Recurly库。

更新

看起来回来的一些对象是自我实例化的。那真是怪了。我不知道PHP会这样做。

1 个答案:

答案 0 :(得分:1)

您在这里遇到的是魔力。由于Magic很难理解,因此调试起来更加困难。期望Recurly PHP库的大部分基于Magic。

  

看起来回来的一些对象是自我实例化的。那真是怪了。我不知道PHP会这样做。

这不是PHP,而是图书馆。它使用magic getters and setters和其他神奇的东西作为属性。他们一定是被一些巫师所驱使,他们非常热爱魔法。你不觉得心醉吗?

超越魔术的最佳方法是自己安装一个步调试器,如 Xdebug ,然后设置断点并直接检查值。所有常见的PHP IDE都支持xdebug remote debugging(即使这称为远程调试,它也适用于您的本地开发机器。)