我看到这个问题是关于 C# 的,我想要 PHP 的答案。我有一些旧代码,有 4 页的 foreach 循环和条件,这使得阅读和理解变得困难。我怎样才能让这个更加面向对象呢?我正在考虑使用 SPL 函数,但尚未完全理解所涉及的内容。

有帮助吗?

解决方案

这段代码也许可以被显着地清理,并朝着 OO 的方向推进,而无需触及 SPL。

仅当您想要改变语言结构(如 foreach())、内置函数(如 count())或数组访问函数(运算符 [] 和函数(如 key()、next() 等))中的正常对象行为时,才需要 SPL 。

清理建议:

  • 如果同一操作在代码中执行多次(超过 1 或 2 次),请将其分解为一个函数。如果要对数组中的所有元素执行此操作,请考虑使用 数组行走. 。如果由于某种原因遍历数组不合适,请使用循环:)
  • 如果您有一些比键:值对更复杂的语义连接数据的多个实例,以及关联的操作,请考虑将其包装在一个类中。但有正式记录的关联。数组可能也适合你。取决于您的风格和数据类型。这里重要的是处理数据的方法的结构和文档。你是否把它作为一堂课并不重要。
  • 完成上述步骤后,将新编写的函数和对象分解为单独的包含文件。我倾向于将大部分内容都包含在一个类中,所以我主要有一个类的公关。文件。但有些辅助类与主类共享一个文件,等等。你会体会到的。

其他提示

如果我是你,我会先编写测试代码。

如果您可以构建一组完整描述您正在重构的功能的测试用例,那么您可以继续并在知道它仍然有效的情况下重写您的代码。

PHPUnit 可能是一个很好的开始。

如果我理解正确的话,那么你已经嵌套4页深的foreach循环(等等),你想知道你听说过这个OO的东西是否有帮助。

您当然应该继续重构代码以降低嵌套级别并提高可读性,但不要将其与对象方向混淆。

OO是一种构造代码的方法,可以将数据结构的定义放在操作这些数据结构的代码旁边。虽然其主要目标之一是通过提供复杂性的封装来提高可读性,但OO并不是唯一的方法。

如果你还没有理解OO的概念,你可能会发现重构你的代码更容易将内部循环中的代码分成单独的函数(希望)每个函数都有一个简单的任务。

别误会我的意思;我是OO的倡导者,特别是作为一种技术,为开发人员提供更高层次的概念,以更有效地讨论设计。 OO非常值得学习。

但是不要让缺乏关于OO的知识阻止你将内部代码从循环中拉出来并将它们放入单一用途的函数中。

(如果我误解了你的OO知识水平,我很抱歉。)

慢慢开始。一次重构一次。

如果要循环遍历大量数组,请查看数组函数,例如 array_map array_walk ,以及朋友。这更像是一个功能性重构,然后是一个OO重构,但它会带你走得很远。 如果更有意义,那么你将拥有一些函数,然后你可以根据需要将它们推送到适当的类中。

Johnathan和gnud的一些好建议。不要太担心SPL,并且了解有关重构的更多信息,并研究重构工具可用于PHP

此外,我不能建议阅读有效使用旧版代码

当然还有规范的重构书

alt text http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU01_.jpg

PHP是一种难以清除代码味道的语言,但只需坚持不懈就可以完成!每天你必须要看看你的代码库,你会感谢自己。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top