致命错误:在非对象上调用第一个成员函数()

时间:2015-03-16 21:15:59

标签: php oop

是的我知道有很多关于这个主题的问题我搜索并尝试了所有的答案,但没有一个帮助我。 这就是我用自己的代码创建另一个问题的原因。

class Student{
    private $_db,
            $_first;

public function __construct() {
    $this->_db = DB::getInstance();
}

public function getLast($fields = array()) {
    $columns = 'admission_no, id';
    $orderBy = 'id';
    $order = 'DESC';

    if(!empty($fields['columns'])){
        $columns = $fields['columns'];
    }

    if(!empty($fields['order_by'])){
        $orderBy = $fields['oder_by'];
    }

    if(!empty($fields['order'])){
        $order = $fields['order'];
    }

    $data = $this->_db->query("SELECT {$columns} FROM students ORDER BY {$orderBy} {$order} LIMIT 1");

    if($data->count()){
        $this->_first = $data->first();
        return true;
    }
    return false;
}

public function first() {
    return $this->_first;
}

}

以上是学生班的代码。 在下面的代码我打电话给学生班,在打电话给学生班时我得到了这个错误。

$student = new Student;

$admission = $student->getLast()->first();
$admission_no = $admission->admission_no;

echo $admission_no;

你们可以给我任何提示或线索吗? 任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:3)

$admission = $student->getLast()->first();

这段代码非常糟糕。您对方法getLast()的结果调用方法first()不在$ student对象上。 getLast()返回true或false,这不是对象肯定。尝试:

$student->getLast();
$admission = $student->first();

答案 1 :(得分:2)

如果要调用链接的方法,则必须在每个方法上返回$this。 即:

 class FormHelper {

    protected $input;
    protected $type;
    protected $name;

    public function input() {
        $this->input = '<input ';
        return $this;
    }

    public function type($type) {
        $this->type = $type;
        return $this;
    }

    public function name($name) {
        $this->name = $name;
        return $this;
    }

    public function render() {
        $out = "{$this->input} type=\"{$this->type}\" name=\"{$this->name}\" />";
        echo $out;
    }

  }

  $form = new FormHelper();

  $form->input()->type('text')->name('email')->render();