Cake PHP 0.2.9 - 构造函数问题

时间:2013-10-30 08:04:17

标签: cakephp constructor

我正在研究旧的cakephp版本0.2.9

我试着写一个构造函数

函数__construct和 函数__construct()并具有相同的类名

但所有错误都像致命错误:调用非对象中的成员函数init()

请尽快帮助

由于

1 个答案:

答案 0 :(得分:2)

覆盖方法时调用父

问题中没有细节,但是已经定义的新构造函数很可能不会调用父

class Parent {

    protected $_name = '';

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

    public function greet() {
        if (!$this->_name) {
            throw new Exception("I got no name");
        }
        return sprintf('Hi, I\'m %s', $this->_name);
    }
}

class Child extends Parent {

    public function __construct() {
        // some logic
    }
}

上面的代码示例中有两个错误

  1. 无意中未调用父类
  2. 更改方法签名
  3. 第一个错误的结果是这有效:

    $Parent = new Parent('Bob');
    echo $Parent->greet();
    

    虽然这会引发异常:

    $Child = new Child('Boblini');
    echo $Parent->greet();
    

    单独解决第一个问题仍然会导致抛出异常,因为子构造函数与父方法没有相同的参数,因此它不能将缺少的参数传递给父方法。

    摘要

    • 始终调用重写的方法(除非有特殊原因不这样做)
    • 确保方法签名与重写方法
    • 相同