PHP(几个问题)面向对象编程,重构,eclipse

5

我在Eclipse中使用PHP。它工作正常,我可以连接到我的远程站点,代码元素有颜色编码和一些代码提示。

我意识到这可能太长了,无法回答所有问题,如果您对其中一个部分有好的答案,只回答那个部分就可以。

首先是通用编码:

  1. 我发现很容易迷失包含文件和它们的变量。例如,如果有一个数据库$cursor,很难记住或甚至知道它是在包含的文件中声明的(包含的文件越多,情况就会变得更糟)。人们如何处理这个问题?

  2. 人们如何记录他们的代码 - 特别是所需的GET和POST数据?

其次是面向对象开发:

  1. 我应该全面采用OO进行开发吗?目前我有一个函数库,我可以包含并将每个“任务”分成单独的文件。它有点丑陋,但它起作用。

  2. 如果我使用OO,如何在PHP中构建目录?Java使用包 - PHP呢?

  3. 我应该如何命名我的文件,应该使用全部小写并用_替换空格“hello_world.php”吗?类的名称应该使用Java中的大写“HelloWorld.php”吗?类和常规函数文件有不同的命名约定吗?

第三是重构:

  1. 我必须说这真是个烦恼。如果我在一个地方更改变量的名称,我必须浏览整个文档和包含此文件的每个文件,并在那里更改名称。当然,这会导致到处都是错误。人们如何解决这个问题?在Java中,如果您在一个地方更改名称,则会在任何地方都更改。

  2. 是否有任何插件可以改善PHP重构?我正在使用从其网站下载的官方PHP版本的Eclipse。

谢谢


我认为这是一个很好的问题,虽然我有许多半成熟的答案,但我会等待有完整答案的人来回答你。至于面向对象编程 - 3.) 这完全取决于你,但我的建议是使用小写字母和下划线。 - Kerry Jones
4个回答

1

我发现使用PHP框架(例如ZendCakeCodeIgniter等)可以强制类结构和命名约定,同时通常也解决了自动加载的问题。大量使用PHPDoc格式有助于代码完成和提示,以及记录特定要求(例如方法参数定义)。


1

首先是一般编码

1) 面向对象编程可以帮助您解决这个问题。通过封装变量和功能,它们不会干扰命名空间。假设我正确理解了您所暗示的问题,使用面向对象的方法有助于减轻在不经意间重新声明变量时可能出现的冲突。(注意:仅仅是减轻,不能完全防止;)另外,我遇到过的一种做法是在变量名称前加上类似“包名称”的东西,这只是将问题转移至更高层次,也不是很美观。:|

2) “适合他们的目的”。PHPdoc 是一个很好的起点;它有助于创建 API 文档。

其次是面向对象开发:

3) 如前所述,“这取决于情况”。需要时再使用。您不必为“hello world”使用完整的面向对象编程。但是您可以选择使用。权衡成本和利益,并明智地选择路线。虽然我个人倾向于建议,在犹豫不决时,优先考虑面向对象编程而不是“非结构化”方法。基本上,了解您的工具以及何时使用它们,然后您就可以轻松自如地做出决策。:)

4) 就我所看到的,目录“结构类似于包”。请注意,“目录”和“类似于”。话虽如此,各种框架已经为自己解决了这个问题;参见其他答案。

5) 无论你怎么做都可以。没有一种明确的方式,你必须这样做,否则就不行。只要选择了自己的道路,就坚持下去;除此之外,某些框架等有自己的命名约定。例如,Symfony 使用像 Java 一样的 CamelCase。

第三,重构

我必须说这真是一件痛苦的事情。

是的 :3 但它会得到回报。

如果我在一个地方更改变量的名称,我必须浏览整个文档以及包含该文件的每个文件,并在那里更改名称。当然,到处都是错误。人们如何解决这个问题?在 Java 中,如果您在一个地方更改名称,它将在所有地方更改名称。

不,它不会。如果您使用支持工具,您只需要使用重构工具一次;但是,如果您在 Java 中重命名类属性,则没有魔法机器人会遍历互联网并自动确保全球所有人都使用新名称。;)

但是如何防止这种情况发生呢?要聪明一些。遵守程序合同,即使用接口。不要直接使用不应该使用的函数/成员。观察层次结构。使用合理的代码分割并尊重此分割的边界。

那么人们如何解决这个问题呢?嗯,我想是搜索和替换吧 ;)

至于Eclipse插件--PHP的动态性使得自动重构代码更加困难;我们不能总是使用静态类型提示等,并且参数和返回类型的推断往往是不可能的。因此,据我所知,“自动重构”在工具方面的支持不像Java世界那样好。虽然我相信对于可行的情况,应该会有插件的。:)


0
关于面向对象开发部分:
我使用autoload功能动态加载类。我的目录结构类似于Java中的包。我的类命名方式也类似于Java(例如HelloWorld.php)。但是,该类的定义路径完全指定了该类所在的路径(例如class FW_package1_package2_HelloWorld {...})。
如果调用了一个类,autoload方法会将所有_替换为/,然后根据提取出的路径查找类(例如FW/package1/package2/HelloWorld.php)。
我受到Java的强烈影响,所以选择了这种方式。

0

看一下nWire for PHP。它是Eclipse PDT的一个插件,提供代码探索和可视化。

它可以轻松地用于跟踪应用程序中的依赖关系,对于面向对象的项目非常方便,使您能够可视化类层次结构等等。

它不支持重构,但可以通过显示给定组件(例如函数或字段)的引用来协助。


nWire已经过时,不支持最新的PHP版本。 - D.A.H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接