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会这样做。
答案 0 :(得分:1)
您在这里遇到的是魔力。由于Magic很难理解,因此调试起来更加困难。期望Recurly PHP库的大部分基于Magic。
看起来回来的一些对象是自我实例化的。那真是怪了。我不知道PHP会这样做。
这不是PHP,而是图书馆。它使用magic getters and setters和其他神奇的东西作为属性。他们一定是被一些巫师所驱使,他们非常热爱魔法。你不觉得心醉吗?
超越魔术的最佳方法是自己安装一个步调试器,如 Xdebug ,然后设置断点并直接检查值。所有常见的PHP IDE都支持xdebug remote debugging(即使这称为远程调试,它也适用于您的本地开发机器。)