Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中继承的优缺点_Php_Oop_Inheritance - Fatal编程技术网

php中继承的优缺点

php中继承的优缺点,php,oop,inheritance,Php,Oop,Inheritance,谁能告诉我php中继承/多级继承的主要优点和缺点是什么吗?提前感谢:)优点:- 继承的一个关键好处是通过在几个子类之间共享公共代码来最小化应用程序中重复代码的数量。当两个相关类中存在等价代码时,通常可以重构层次结构,将公共代码向上移动到一个相互的超类。这也会导致更好的代码组织和更小、更简单的编译单元 继承还可以使应用程序代码的更改更加灵活,因为从公共超类继承的类可以互换使用。如果方法的返回类型是超类 可重用性——使用基类的公共方法而无需重写的便利性 可扩展性——根据派生类的业务逻辑扩展基类逻辑

谁能告诉我php中继承/多级继承的主要优点和缺点是什么吗?提前感谢:)

优点:-

继承的一个关键好处是通过在几个子类之间共享公共代码来最小化应用程序中重复代码的数量。当两个相关类中存在等价代码时,通常可以重构层次结构,将公共代码向上移动到一个相互的超类。这也会导致更好的代码组织和更小、更简单的编译单元

继承还可以使应用程序代码的更改更加灵活,因为从公共超类继承的类可以互换使用。如果方法的返回类型是超类

可重用性——使用基类的公共方法而无需重写的便利性 可扩展性——根据派生类的业务逻辑扩展基类逻辑 数据隐藏——基类可以决定将某些数据保持私有,以便派生类无法更改这些数据

重写——通过继承,我们将能够重写基类的方法,以便在派生类中设计基类方法的有意义的实现

缺点:-

  • 继承的一个主要缺点是增加了程序跳过所有重载类的时间/精力。如果一个给定的类上面有十个抽象级别,那么它基本上需要十次跳转来运行在每个类中定义的函数

  • 使用继承的主要缺点是两个类(基类和继承类)紧密耦合。 这意味着一个不能独立使用

  • 随着时间的推移,在维护期间添加新特性时,需要同时更改基本类和派生类。如果方法签名被更改,那么我们在这两种情况下都会受到影响(继承和组合)

  • 如果在“超类”或聚合中删除了一个方法,那么我们将不得不重新考虑使用该方法。在继承的情况下,事情可能会变得有点复杂,因为我们的程序仍将编译,但子类的方法将不再覆盖超类方法。这些方法本身将成为独立的方法


  • 不确定这是否是适合此类问题的网站,但可以

    假设您有一些基本类
    Base
    ,每个其他类都会扩展它。在base中,您可以定义所有其他类都可以使用的东西,例如连接到mysqli,这样所有类都可以使用
    $this->mysqli
    ,而不需要声明它

    我建立了一个电子商务cms,我用这种方式。我还定义了一个名为
    getLink()
    的方法,该方法检查是否存在
    getUrl()
    getTitle()
    方法。这些方法在每个子类中都有定义(在我的CMS
    产品
    类别
    …)。让我们来看看
    Product
    类,还有方法
    getUrl()
    getTitle()
    ,但是方法
    getLink()
    位于
    Product
    扩展的
    Base
    中。我几乎在任何地方都使用方法
    getLink()
    ,因此如果我不想在每个类中都编写它,我只需在
    基中编写它,我就可以使用它

    我的CMS的另一个例子是:在
    Base
    结构中,我检查是否提交了名为
    global\u update
    的输入。它将检查是否定义了
    $this->table
    $this->id
    ,如果是,它将用数据更新数据库。否则,我需要为每个更新操作定义一个处理程序。这样,我为每个类都有一个全局函数,并且我只为更复杂的表单编写自己的处理程序


    我希望这是可以理解的,如果不能理解,请评论并提问。

    为什么要否决我的答案?对于你的答案或问题。(我没有否决你的答案)@user3647254我不是指你,而是有人在没有给出任何理由的情况下否决了我的答案:((比如我的问题出了什么问题)你还没有回答任何问题,怎么会有人否决