设计模式使旧的PHP代码对象面向

时间:2011-09-05 16:45:18

标签: php oop design-patterns

php新手。我正在处理旧代码,我必须在其中添加许多新功能。 代码现在不使用php5的任何面向对象的功能,但我将使用它们并将尝试在空闲时间重构重要和复杂的旧东西。

我有几个问题:
1.作为一个来自java背景的人,从类中访问外部函数的能力似乎是错误的,我必须这样做才能重用旧函数。这是正确的做法吗?...对我来说感觉很不自然,有没有更好的方法来重用旧功能?

2.有人可以建议一些好的设计模式,可以与旧的PHP代码一起使用,使其面向对象,并使其优雅地使用新功能。

5 个答案:

答案 0 :(得分:1)

以下是我的想法:

  1. 除非您进行大量测试以确保在重构​​代码以使用面向对象设计时不会破坏所有内容,否则我不建议更改现有代码的工作方式。您可以通过将旧函数包装到逻辑分​​组中来完成此操作,creation of Facade classes将功能传递给现有代码,或者如果需要更复杂的操作,则调用现有代码中的多个函数。您的新代码将包含根据需要与旧版Facade交互的对象,并使用适当的OO设计实现新功能。
  2. 如果您计划重构旧代码,我认为有必要做的一件事就是进行适当的测试。如果您还没有进行适当的测试,我会看看SimpleTest。就设计模式而言,它将在很大程度上取决于您现有代码试图实现的目标。

答案 1 :(得分:1)

  1.   

    作为一个来自java背景的人,从类中访问外部函数的能力似乎是错误的,我必须这样做才能重用旧函数

    这总是让我对Java感到厌烦。

    使用免费功能没有任何错误。 “一切都必须在OOP中的物体中”的口号是完全垃圾;只有在逻辑上适合对象类型的东西才应该如此。

    所以不要担心它。

  2.   

    有人可以建议一些好的设计模式,可以与旧的PHP代码一起使用,使其面向对象,并使其优雅地使用新功能。

    没有任何设计模式可以为您进行重构。

    设计模式不是魔法子弹;这个短语被过度使用,仅仅是描述经常使用的设计惯例的一种方式。如果你真的想要浏览维基百科上的模式列表,但我只是以最合乎逻辑的方式编写你的代码,然后,如果你注意到它恰好符合某人对“设计模式”的想法。 ..好吧,我猜你好!

答案 2 :(得分:0)

  1. 您可以简单地将此函数的调用封装在实现特定接口的对象中
  2. 参见1.这是一般规则;只需识别当前通过不同功能实现的一些逻辑“模块”,并在对象和接口后面封装和隐藏这些功能。

答案 3 :(得分:0)

您可以使用facade pattern封装对旧代码的访问权限,以便在代码和旧代码之间提供干净的界面。

我用相当糟糕的遗留代码完成了这一切(我的,我很惭愧地说!),重写不是一个选项。

我完成了一个很好的干净界面,可以轻松修改,易于阅读。这是非常值得的额外努力,并允许我在我的闲暇时重新调整旧代码,并在时间允许的情况下(仍然在努力)。

答案 4 :(得分:0)

我的想法比什么都重要。

如果在Java中你曾经创建了一个静态方法,比如MyClass :: someStaticMethod(参数),那就像使用'free'函数一样。

这就是静态方法的真正含义。它们可以在全球范围内访问,它实际上只是一个非常长的名称,但除此之外它是一种免费的方法。

你可能把它们放在'类'中,但实际上它是java在有限意义上创建全局函数的方式。如果你这么想,php免费功能看起来并不那么糟糕,因为它们的名字更短。