Naming Conventions
This document captures naming rules that are easy to miss when reading existing code. Following them up front prevents the most common class of review comments on Festi merge requests.
No Acronyms or Abbreviations in Identifiers
Database columns are often abbreviated for historical reasons (cdate,
mdate, changefreq, lastmod, descr). Identifiers must always
spell the word out, even when they wrap an abbreviated column.
| Bad | Good |
|---|---|
FIELD_CDATE |
FIELD_CREATE_DATE |
FIELD_MDATE |
FIELD_MODIFY_DATE |
FIELD_CHANGEFREQ |
FIELD_CHANGE_FREQUENCY |
FIELD_LASTMOD |
FIELD_LAST_MODIFIED |
getChangefreq() |
getChangeFrequency() |
getLastmod() |
getLastModified() |
_buildLandingHost() |
_getHost() |
$cfg, $mgr, $svc |
$config, $manager, $service |
The DB column itself can stay abbreviated — only the constant, property, parameter, method, or class name needs to be expanded.
public const FIELD_CREATE_DATE = 'cdate'; // OK: constant explains the abbrev
public const FIELD_MODIFY_DATE = 'mdate'; // OK
Why
- Identifiers are read far more often than they are typed.
- Abbreviations only make sense to people who already know the domain.
- Auto-complete makes long names cheap.
- Acronyms lose meaning across teams and time.
ValuesObject Classes Are Singular
The class wraps one row, even if the table is plural.
| Table | Class |
|---|---|
sitemap_urls |
SitemapUrlValuesObject |
contents_tags |
ContentTagValuesObject |
users |
UserValuesObject |
orders_items |
OrderItemValuesObject |
The DAO method that returns a list is plural
(getSitemapUrls()), but the type hint of each element is singular
(SitemapUrlValuesObject).
Private Members Use a Leading Underscore
private string $_status;
private function _getHost(): string { ... }
This is enforced by the Festi PHPCS standard. It applies to private and protected members; public members do not get the prefix.
Method Verb Conventions
| Prefix | Returns |
|---|---|
get* |
A value (object, array, scalar). No side effects. |
fetch* |
A rendered template string. |
is* |
A boolean. |
has* |
A boolean (existence/ownership). |
on* |
An event/route handler. Returns bool for routes. |
_* |
A private helper. |
Mixing these (e.g. getMain() for a method that renders a template)
makes the call site harder to read.
File and Class Names Match Exactly
SitemapUrlValuesObject.php must contain class SitemapUrlValuesObject
in the namespace declared by its directory. Renaming a class always
means renaming the file in the same commit.