php 中继承的优点和缺点
Advantages and Disadvantages of Inheritance in php
任何人都可以提前告诉我 Inheritance/multi-level 继承在 php.Thanks 中的主要优点和缺点是什么 :)
优点:-
继承的主要好处之一是通过在多个子class 之间共享公共代码,最大限度地减少应用程序中重复代码的数量。在两个相关的 class 中存在等效代码的情况下,通常可以重构层次结构以将公共代码向上移动到相互超级 class。这也往往会导致更好的代码组织和更小、更简单的编译单元。
继承还可以使应用程序代码更灵活地更改,因为从公共父类class 继承的classes 可以互换使用。如果方法的return类型是superclass
可重用性 -- 使用基础 class 的 public 方法而无需重写的便利
可扩展性——根据派生 class 的业务逻辑扩展基础 class 逻辑
数据隐藏——基础 class 可以决定将一些数据保密,这样它就不会被派生的 class
改变
重写——通过继承,我们将能够重写基础 class 的方法,这样就可以在派生的 class 中设计基础 class 方法的有意义的实现].
缺点:-
继承的主要缺点之一是增加了 time/effort 程序需要跳过重载 class 的所有级别。如果一个给定的 class 在它上面有十个抽象级别,那么它基本上需要十次跳转到 运行 通过每个 classes
[= 中定义的函数39=]
使用继承的主要缺点是两个 classes(基础和继承 class)紧密耦合。
这意味着不能彼此独立使用。
此外,随着时间的推移,在维护期间添加新功能时,需要更改基础和派生的 classes。如果更改方法签名,那么我们将在两种情况下受到影响(继承和组合)
如果在 "super class" 或聚合中删除了一个方法,那么我们将不得不重新考虑使用 method.Here 事情会变得有点复杂继承的情况,因为我们的程序仍然可以编译,但是 subclass 的方法将不再覆盖 superclass 方法。这些方法将成为独立的方法。
不确定这是否是此类问题的正确站点,但没关系。
假设您有一些基本的 class Base
,每隔 class 扩展一次。在 base 你可以定义所有其他 classes 可以使用的东西,例如连接到 mysqli,所以所有 classes 都可以使用 $this->mysqli
而不需要声明它。
我构建了一个电子商务 cms,我以这种方式使用它。我还定义了一个名为 getLink()
的方法,它检查是否有方法 getUrl()
和 getTitle()
。这些方法在每个 child class 中定义(在我的 CMS Product
、Category
...)。让我们以Product
class为例,还有方法getUrl()
和getTitle()
,但是方法getLink()
在Base
中,Product
延伸。我几乎到处都使用getLink()
方法,所以如果我不想在每个class中都写它,我只需将它写在Base
中就可以使用它。
来自我的 CMS 的另一个示例:在 Base
构造中,我检查是否提交了名称为 global_update
的输入。它将检查 $this->table
和 $this->id
是否已定义,如果是,它将使用数据更新数据库。否则我需要为每个更新操作定义一个处理程序。这样我就可以为每个 class 设置一个全局变量,并且我只为更复杂的表单编写自己的处理程序。
我希望这是可以理解的,如果没有,请评论并询问。
任何人都可以提前告诉我 Inheritance/multi-level 继承在 php.Thanks 中的主要优点和缺点是什么 :)
优点:-
继承的主要好处之一是通过在多个子class 之间共享公共代码,最大限度地减少应用程序中重复代码的数量。在两个相关的 class 中存在等效代码的情况下,通常可以重构层次结构以将公共代码向上移动到相互超级 class。这也往往会导致更好的代码组织和更小、更简单的编译单元。
继承还可以使应用程序代码更灵活地更改,因为从公共父类class 继承的classes 可以互换使用。如果方法的return类型是superclass
可重用性 -- 使用基础 class 的 public 方法而无需重写的便利 可扩展性——根据派生 class 的业务逻辑扩展基础 class 逻辑 数据隐藏——基础 class 可以决定将一些数据保密,这样它就不会被派生的 class
改变重写——通过继承,我们将能够重写基础 class 的方法,这样就可以在派生的 class 中设计基础 class 方法的有意义的实现].
缺点:-
继承的主要缺点之一是增加了 time/effort 程序需要跳过重载 class 的所有级别。如果一个给定的 class 在它上面有十个抽象级别,那么它基本上需要十次跳转到 运行 通过每个 classes
[= 中定义的函数39=]使用继承的主要缺点是两个 classes(基础和继承 class)紧密耦合。 这意味着不能彼此独立使用。
此外,随着时间的推移,在维护期间添加新功能时,需要更改基础和派生的 classes。如果更改方法签名,那么我们将在两种情况下受到影响(继承和组合)
如果在 "super class" 或聚合中删除了一个方法,那么我们将不得不重新考虑使用 method.Here 事情会变得有点复杂继承的情况,因为我们的程序仍然可以编译,但是 subclass 的方法将不再覆盖 superclass 方法。这些方法将成为独立的方法。
不确定这是否是此类问题的正确站点,但没关系。
假设您有一些基本的 class Base
,每隔 class 扩展一次。在 base 你可以定义所有其他 classes 可以使用的东西,例如连接到 mysqli,所以所有 classes 都可以使用 $this->mysqli
而不需要声明它。
我构建了一个电子商务 cms,我以这种方式使用它。我还定义了一个名为 getLink()
的方法,它检查是否有方法 getUrl()
和 getTitle()
。这些方法在每个 child class 中定义(在我的 CMS Product
、Category
...)。让我们以Product
class为例,还有方法getUrl()
和getTitle()
,但是方法getLink()
在Base
中,Product
延伸。我几乎到处都使用getLink()
方法,所以如果我不想在每个class中都写它,我只需将它写在Base
中就可以使用它。
来自我的 CMS 的另一个示例:在 Base
构造中,我检查是否提交了名称为 global_update
的输入。它将检查 $this->table
和 $this->id
是否已定义,如果是,它将使用数据更新数据库。否则我需要为每个更新操作定义一个处理程序。这样我就可以为每个 class 设置一个全局变量,并且我只为更复杂的表单编写自己的处理程序。
我希望这是可以理解的,如果没有,请评论并询问。