PHP:致命错误在非对象上调用成员函数....

Fla*_*ter 4 php

我遇到了PHP的问题,因为它一直在标题中引用Exception.它在以下行失败:

$item->getDescription();
Run Code Online (Sandbox Code Playgroud)

我理解错误应该是什么意思($item是null).但是,$ item不为null.

方案如下:这是一个将供应商的产品同步到商店的脚本.为此,我创建了自己的类(SimpleProduct).这个类有一个getDescription()函数.

问题是我收到的数据往往有很多垃圾,就像尚未填写的物品一样.该脚本应跳过这些项目并继续迭代其余产品.这个致命的错误会杀死整个脚本.

我已经尝试过实施保护措施来防止这种情况发生,但它仍然会不断发生.这是当前的代码(删除了一些片段,因为它们与当前案例无关).

//This is part of a class that performs the sync

public function syncProduct($item) {

    if(empty($item)) { return "Not a product"; }
         else { var_dump($item) }

    $foo = $item->getDescription();
}
Run Code Online (Sandbox Code Playgroud)

当检查var_dump结果时,我得到一个填充了一些值的对象.看到它是正确的类型(SimpleProduct)并且它不是空/ null,我怀疑这个错误停止发生,但它仍然存在.

另请注意,在弹出这个产品之前,已经发生了几个没有任何错误的产品同步,所以我知道代码是有效的.不知何故,这个特定情况滑过我的空检查.

我的空检是否有问题?当有问题的对象存在时,如何抛出非对象的错误?

Kem*_*lah 8

而不是检查变量是否为空,为什么不检查它是否是一个实例SimpleProduct

if ($item instanceof SimpleProduct)
{

}
Run Code Online (Sandbox Code Playgroud)

http://php.net/manual/en/language.operators.type.php

  • 在这种情况下,我将在`if(!instanceof)`分支中添加一个debug_backtrace(),并检查是否有另一个调用者. (2认同)