加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 打开/关闭原理 – 如何调用新版本?

发布时间:2020-12-13 13:57:00 所属栏目:PHP教程 来源:网络整理
导读:我正在试图把握开放/封闭的原则(在我的 PHP中,但实际上并没有什么不同). 我理解的方式是,一个类永远不会打开修改.仅用于修复错误.如果我想添加新的代码到类,那么我必须创建一个新的代码,并扩展“旧”类.这是我可以添加新代码的唯一方法. 在某种程度上,我可以
我正在试图把握开放/封闭的原则(在我的 PHP中,但实际上并没有什么不同).

我理解的方式是,一个类永远不会打开修改.仅用于修复错误.如果我想添加新的代码到类,那么我必须创建一个新的代码,并扩展“旧”类.这是我可以添加新代码的唯一方法.

在某种程度上,我可以看到这样的优点.因为基本上你创建了一些版本控制系统,旧的代码总是可以工作,但是你总是可以尝试使用新的类.

但这在实践中如何工作?我的意思是假设我有以下类:

class MyObject
{
    public function doSomething()
    {
        echo 'Im doing something';
    }
}

所以在某个地方我可能会实例化这个类:

$obj = new MyObject();

但是,我决定在该对象中使用另一种方法是很好的.所以我也可以做别的事情根据OCP我不能修改类.所以我必须创造一个新的,延伸到旧的权利?

第一个问题我怎么称呼新班?因为它不是一个完整的新对象.喜欢. User对象是User对象.我不能突然给它完全不同的名字,因为它需要另一种方法.无论如何,我创建新的课程:

class MyNewObject extends MyObject
{
    public function doSomethingElse()
    {
        echo 'Im doing something else now';
    }
}

现在这也意味着我必须改变代码行,我实例化了“MyObject”类,并用“MyNewObject”类替换它.如果这样做在不止一个地方完成,那么我必须搜索源代码…(想一下控制器类中的方法,几乎??总是使用’??new’关键字来实例化某些类).

这同样基本上适用于继承.我必须找到继承旧类的每个类,并且必须用新类替换它.

所以基本上我的问题是:

你如何命名有新方法的新课程?只是因为我添加了一些新的功能,并不意味着我可以给班级一个全新的名字…

如果“旧”类从多个地方实例化(或继承),该怎么办?那么我必须找到所有这些地方?收益在哪里?

开放原则不旨在用作一种版本控制系统.如果您真的需要更改课程,请继续进行更改.您不需要创建新类并更改实例化旧类的所有地方.

开放原则的要点是,设计良好的系统不应要求您更改现有功能以添加新功能.如果您正在向系统添加一个新类,则不需要搜索所有代码来查找需要引用该类的地方或具有特殊情况.

如果你的类的设计不够灵活,不能处理一些新的功能,那么通过一切手段来改变你的类中的代码.但是当您更改代码时,使其变得灵活,以便将来无需更改代码即可处理类似的更改.这是一个设计策略,而不是一套手铐,以防止您进行更改.通过良好的设计决策,随着时间的推移,当您向系统添加新功能时,现有代码将需要更少和少量的更改.这是一个迭代过程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读