【问题标题】:php class inheritance - is it necessary to run constructor on parent(s)php 类继承 - 是否有必要在父级上运行构造函数
【发布时间】:2014-05-06 10:43:17
【问题描述】:

对于我最新的网站,我正在尝试使用 OOP。我正在使用该项目来加深对这种技术的理解。以前我会“包含”一个函数文件夹,其中包含各种标记为 image.upload.functions.php 和 general.error.handling.functions.php 等的 php 文件。

不过,这次我尽可能使用类。

我刚刚读到,为了使用父类方法(在扩展类中),您必须运行父类构造函数,但我还没有这样做,我的项目似乎工作正常。

所以.. 我有一个名为 Form Validation 的类 我有另一个名为 Process Login 的类,它扩展了表单验证。

我的表单验证类执行诸如测试密码强度以确保其足够强、检查用户是否在数据库中等操作。

我用一个注册类和一个被遗忘的密码类扩展了表单验证。

我应该说:

parent::_construct();

..在每个扩展类的构造函数中?

有人能“简单地”解释一下我们这样做或不这样做的原因吗?以及这是否是我应该做的事情?

非常感谢:-)

【问题讨论】:

  • 完全取决于构造函数中的内容。如果它只是一个方法库,那么我会说你不需要调用构造函数

标签: php class oop inheritance


【解决方案1】:

这里是官方文档的链接:constructors and destructors

这是引用:

注意:如果子类定义了构造函数,则不会隐式调用父构造函数。为了运行父构造函数,需要在子构造函数中调用 parent::__construct()。如果子类没有定义构造函数,那么它可以像普通类方法一样从父类继承(如果它没有声明为私有)。

不需要调用父构造函数。而且,通常,如果您在自己的子类中定义了构造函数,则不会隐式调用它。但是,如果在父构造函数中你有一个很好的逻辑或功能,你不想失去,那么从孩子的构造函数中调用父构造函数。

【讨论】:

    【解决方案2】:

    如果你想从你扩展的类中重用构造函数的功能,你可以调用parent::__construct()(注意有两个下划线)。

    代码的重用是OOP中继承的一个主要原因。所以如果你的父类中有任何算法你想使用,你必须调用parent::__construct()

    如果您要扩展父级的构造函数,您还必须在您自己的添加之前(或之后)调用它,例如像这样

    class A extends B {
        public __constructor() {
            parent::__construct();
            // Your own code
        }
    }
    

    如果您不想使用任何父母的构造函数,则不要从该父构造函数继承 - 但我假设在大多数情况下您想要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 2013-01-24
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 2013-03-05
      • 2011-12-08
      相关资源
      最近更新 更多