关于用PHP组织类的最佳方法的意见

时间:2010-06-13 16:20:49

标签: php code-organization

我几乎已经开始使用

的Java包命名约定了
  

com.website.app.whatever

但我不确定在PHP中执行此操作的最佳方式。

选项1:

创建目录结构

com/
    mysite/
          myapp/
               encryption/
                         PublicKeyGenerator.class.php
                         Cipher.class.php
               Xml/
                         XmlHelper.class.php
                         XmlResponse.class.php

现在这就是Java的用途,它使用文件夹来组织层次结构。然而,这在PHP中有点笨拙,因为没有本机支持它,当你移动东西时,你会破坏所有包含。

选项2

使用包的句点命名类,因此名称就像在Java中一样,但都可以在同一目录中使__autoload变得轻而易举。

classes/
        com.mysite.myapp.encription.PublicKeyGenerator.class.php
        com.mysite.myapp.encription.Cipher.class.php
        com.mysite.myapp.xml.XmlHelper.class.php
        com.mysite.myapp.xml.XmlResponse.class.php

这里唯一真正的缺点是所有类都在一个文件夹中,这可能会让大型项目感到困惑。

寻求意见,这是最好还是还有其他更好的选择?

4 个答案:

答案 0 :(得分:1)

这不仅取决于您将拥有多少课程,还取决于您将拥有多少个网站和应用。如果您有多个站点或应用程序,那么拥有文件夹更合乎逻辑,这样您就不会感到困惑。如果您只有几个类(比如少于20个),那么将它们全部保存在一个文件夹中可能更合乎逻辑。基于上面的类和你想要的详细程度,我会继续使用目录,以便稍后你不要看它并说“Gosh我希望我曾经使用过目录”。然后你最终会编写一些你只会使用的无用程序,这样你就可以改变你的文件结构。

答案 1 :(得分:1)

我建议选项1,因为在那个布局中特别是代码的分离,这将最终成为一个易于管理和灵活的系统。

答案 2 :(得分:1)

您可以遵循Zend Framework标准,例如

带自动加载的Option1

new App_Encryption_Cipher

autoload魔术回调中将_替换为'/'并进一步检查(文件是否存在?文件名中的垃圾是搜索?符号?)

  
    

然而,这在PHP中有点笨拙,因为它没有本机支持,当>>你移动周围的东西打破所有包括。

  

取决于您计划/设计应用程序的方式。无论如何,在重构方面都没有逃脱:)

我知道你已经习惯了java命名约定,但是如果你做了类似的事情(新的com_mysite_myapp_encryption_cypher),那么写作总是很痛苦

答案 3 :(得分:1)

我一直更喜欢带有较少文件夹的带前缀文件,因此导航较少,但这只是我个人的偏好。

如果您认为以后可能想要更改它,可以创建一个中央包含脚本,如:

<?php do_include('encryption_cypher'); ?>


   function do_include($file){
    if($file== 'encryption_cypher')
        include('class/app/someotherfolder/encryption/cypher.php');

    }

然而,从长远来看,这只是一个混乱,所以选择两个邪恶中较小的一个去。