Namenskonvention von Interfaces und abstrakten Klassen in PHP 5.3

Tags:

Als überzeugter Zend Framework-Nutzer folge ich beim Programmieren auch dessen Coding Guidelines. Dies bedeutet für Interfaces und abstrakte Klassen folgende Konvention:

// Interface in Zend/View/Interface.php
interface Zend_View_Interface {}

// Abstrakte Klasse in Zend/View/Abstract.php
abstract class Zend_View_Abstract {}

Diese Konvention hat den Vorteil, dass man durch das Ersetzen des Unterstrichs durch den Verzeichnisseparator auf einfache Art auf den Speicherort der Klasse/des Interfaces schliessen kann.

Da wir aber mittlerweile alle wissen, dass in PHP 5.3 Namespaces eingeführt wurden, ändert sich diese Konventionen grundlegend.

// Interface in Zend/View/Interface.php
namespace Zend\View;
interface Interface {}

// Abstrakte Klasse in Zend/View/Abstract.php
namespace Zend\View;
abstract class Abstract {}

Wie ihr bestimmt bemerkt hab ist obiges Beispiel unbrauchbar. Da interface und abstract reservierte Wörter sind, können wir sie nicht für Deklarationen verwenden.

Als Lösungansatz schweben mir da mehrere Varianten vor.

"Hungarische Notation"

I für Interface und A für abstrakte Klassen.

// Interface in Zend/View/IView.php
namespace Zend\View;
interface IView {}

// Abstrakte Klasse in Zend/View/AView.php
namespace Zend\View;
abstract class AView {}

... oder ohne das Package ...

// Interface in Zend/IView.php
namespace Zend;
interface IView {}

// Abstrakte Klasse in Zend/AView.php
namespace Zend;
abstract class AView {}

Als Teil des Subpackages

// Interface in Zend/ViewInterface.php
namespace Zend;
interface ViewInterface {}

// Abstrakte Klasse in Zend/ViewAbstract.php
namespace Zend;
abstract class ViewAbstract {}

... oder in umgekehrter Schreibweise ...

// Interface in Zend/InterfaceView.php
namespace Zend;
interface InterfaceView {}

// Abstrakte Klasse in Zend/AbstractView.php
namespace Zend;
abstract class AbstractView {}

Beschreibende Interface-Namen

Wie in der SPL: Countable, Traversable, etc.

// Interface in Zend/View/Viewable.php
namespace Zend\View;
interface Viewable {}

Ähnliche Artikel

Kommentare