在PHP中删除重复的硬编码循环和条件

时间:2008-10-16 22:05:38

标签: php spl

我看到这个问题是关于C#我想要PHP的答案。我有一些旧的代码,有4页的foreach循环和条件,这使得它很难阅读和遵循。我怎么能让这个OO更多?我在考虑使用SPL函数,但还没有完全理解所涉及的内容。

5 个答案:

答案 0 :(得分:3)

此代码可能会被显着清理,并且在向OO的方向推动很远,而不会触及SPL。

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

清理建议:

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

答案 1 :(得分:2)

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

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

PHPUnit可能是开始这个​​的好地方。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

Johnathan和gnud的一些好建议。不要太担心SPL和learn more about refactoring,并查看refactoring tools are available for PHP

另外,我不能推荐足够的阅读Working Effectively with Legacy Code

alt text

当然还有规范的Refactoring Book

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

答案 4 :(得分:0)

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

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

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

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

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

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

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