PHP错误方法在Child类中不存在,method_exists($ Child, $method)通过


PHP error method doesn't exist in the Child class, method_exists($child, $method) passes

在这里使用Laravel 5.1。我创建了两个类,一个扩展了另一个:

abstract class ActivityTimeline extends Model

:

$this->fields = [
   'owner_id',
   'contact_name',
   'mailing_label',
   'source_id',
   'source_raw',
   'initial_referer_raw',
   'primary_person',
   'connections',
];
foreach ($this->fields as $field) {
    if (method_exists($this, $field)) {
        dd('the method exists', $this, $field);
        $timelineActivity[$field] = $this->{$field}();
    }
}

class ContactActivity extends ActivityTimeline {

:

public function primary_person()
{
    return $this->getPrimaryPerson($this->record);
}

add (' The method exists', $this, $field);"返回以下内容:

方法存在

ContactActivity{#963▶}

"primary_person"

然而,当这个if语句通过时,我尝试调用刚才检查存在的方法,我得到:

Builder.php 2123行BadMethodCallException:调用未定义方法Illuminate'Database'Query'Builder::primary_person()

所以似乎我没有工作与一个ContactActivity对象在这里,即使dd显示我是。有人知道我在这里做错了什么,得到了错误的对象吗?

我认为这是因为你从父类调用了子方法。尝试添加

abstract function primary_person();

On ActivityTimeline类