Introduction

With the introduction of namespaces in PHP 5.3, the PEAR1 rule of Package_Subpackage_ClassName naming (for creating pseudo-namespacing) is no longer necessary. Package naming rules will be set by the PEAR2_Naming_StandardsRFC, whereas class naming rules are addressed here in this RFC.

The naming of individual classes retains these PEAR1 rules [1]:

Start with capital letter, e.g. class Foo {}

CamelCase for multi-worded class names, e.g. class FooBarBaz {}

Abbreviations only start with capital letter, e.g. class MrClean {}

Acronyms should be fully capitalized, e.g. class PEARTree {}

New guidelines for PEAR2:

syntax/scope hints in the class name must be suffixed rather than prefixed, e.g. abstract class FooAbstract {}

such suffixing is required for abstract classes and interfaces, for additional clarity to non-native English readers [4]

Issues

A debate was originally spurred by the use of actual classes whose names, once namespaces removes their Several_Prefix_Layers_ from the name, will be just “Abstract” or “Interface” [2]. This prompted some discussion around various forms of “Hungarian Notation” in class naming, particularly for Abstract and Interface classes. Part of this RFC addresses the justification for requiring such naming style [4].

Proposed Solution

Initial rules and guidelines:

a suffix for an Abstract or Interface class name is required

the extra naming is more legible to non-native English speakers [4]

the suffix should be a full legible word, not a cryptic letter/abbreviation (e.g. FooAbst, FooA)

this follows other well-known conventions (e.g. Java)

The only exception to the Interface suffix requirement is the base package exception, which must be named simply “Exception”. [3]

One benefit of the suffix rather than a prefix is in alphabetical-based visual listing of classes. Using prefixes would result in all unrelated abstract classes being listed togther… the same result would apply to all unrelated intefaces.