我必须在构造函数的第一行调用parent :: __ construct()吗?

And*_*eKR 7 php oop

我知道在Java中,super()构造函数必须被调用为重写构造函数的第一行.

这也适用parent::__construct()于PHP中的调用吗?

我发现自己编写了一个这样的Exception类:

class MyException extends Exception {

  public function __construct($some_data) {

    $message = '';
    $message .= format_data($some_data);
    $message .= ' was passed but was not expected';

    parent::__construct($message);
  }

}
Run Code Online (Sandbox Code Playgroud)

我想知道这是否会被认为是PHP中的错误/错误做法.

dec*_*eze 10

如果您希望执行父构造函数中的代码,则需要parent::__construct(…)在某个时刻调用.它没有技术上的事情,当你这样做.有时在调用父类的构造函数之前在重写的构造函数中做一些工作更有意义,有时你依赖于父类的构造函数所做的工作,然后才能在重写的构造函数中工作.

作为一个经验法则我说你应该调用父类的构造尽快.如果在调用父构造函数之前需要执行某些操作,请执行此操作.如果没有,请立即拨打电话.这是为了避免父的构造函数撤消您在重写的构造函数中所做的任何工作,例如设置某些属性.

class A {
    function __construct() {
        $this->foo = 'bar';
    }
}

class B extends A {
    function __construct() {
        // parent::__construct();
        $this->foo = 'baz';
        // parent::__construct();
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,调用父项的第一个或最后一个之间的差异会对结果对象产生很大的影响.哪个更合适取决于你想要做什么.

  • 我无法回答,因为我不懂 Java。在 PHP 中,`__construct` 就像任何其他方法一样,它只是做*某事*,不管你让它做什么,而你什么时候调用它并不重要。它唯一的特别之处在于它在对象构建时执行。 (2认同)