Search code examples
phpcode-organization

Opinions sought on the best way to organise classes in PHP


I am pretty much set on using the Java package naming convention of

com.website.app.whatever

but am unsure about the best way of doing this in PHP.

Option 1:

Create a directory structure

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

Now this is how Java does it, it uses the folders to organize the heirarchy. This is however a little clumsy in PHP because there is no native support for it and when you move things around you break all includes.

Option 2

Name classes using a periods for the package, therefore names are just like in Java but can all be in the same directory making __autoload a breeze.

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

The only real disadvantage here is that all the classes are in a single folder which might be confusing for large projects.

Opinions sought, which is the best or are there other even better options?


Solution

  • You could follow Zend Framework standards like

    Option1 with autoload

    new App_Encryption_Cipher

    in autoload magic callback replace the _ to '/' and do further checking (the file exists? garbage in the filename being seek? symbols?)

    This is however a little clumsy in PHP because there is no native support for it and when >> you move things around you break all includes.

    Depends on how you plan/design your application. there is no escape when it comes to refactoring anyway :)

    I know you are used to java naming conventions, but if you do something like (new com_mysite_myapp_encryption_cypher) well, it kinda becomes a pain to write all the time