On some cases, by example when you works on webservices, data import or an ETL, you can be a little lost between all the variables you use, specifically arrays.
Even if it’s not in the coding standard, I developed a derivative of the Hungarian notation to prefix my variables and find myself there. This notation can be applied in php, but also to any other languages, especially non-typed.
NOTE : I recommend NOT using hungarian notation everytime (for exemple, will be almost useless in a MVC context), but only when it’s really needed.
There is the prefixing I use with PHP variables in that specific cases, depending on their type and semantic meaning :
Scalar types prefix
$is
,$b
: boolean$s
: string$i
: int (signed)$n
: natural (unsigned int)$f
: float$fd
: float round to 1 decimals$fc
: float round to 2 decimals$fm
: float round to 3 decimals$m
: mixed.$v
: void / null.
Non-scalar prefix types
$o
: object$r
:$h
: handler (type in PHP : resource).
Arrays, can be, often, by design, a collection of elements, or a single element. For me an “element” is an object-like data, stored as an associative array. While a collection if an array of elements.
So I can distinguish 3 different semantic types for arrays :
$c
: Collection [auto-incremented keys] : an array with integer keys containing elements (like « list » in Python). The keys are not used neither assigned, and only usefull to know the processing order.$a
: Dictionnary [associative keys] : the array keys are important and defined for each index (like in dictionnary Python or hash in Perl).$e
: Element [associative keys] ; like $a, but with a semantic information : contains data about one element. Think about an Object converted in Array.
important.
For Collection and Dictionnary variables, I usually also put the variable in plural (or simply suffix with an s). But for Element, I put the variable name singular
For some array, i can also combine prefixes, like :
$co
: incremented-collection of objects$ce
: incremented-collection, and each index contains an associative array defining an Element$as
: a dictionnary of string elements$cbo
: increment-collection of boolean OR objects. So we have to test if the entry is an object before processing it.
Other semantic types :
Date :
– $ts
: timestamp (unsigned int)
– $dt
: datetime, format ‘Y-m-d H:i:s’ (string)
Others :
– $h
: string of html code
– $j
: string of json code
– $x
: string of XML code
– $y
: string of YaML code
– $u-
: unsafe type or value, need to be checked or sanitized for security reason.
– $z-
: string of encoded something
They can be combined :
– $us
for unsafe string, with possible code injection.
– $zo
: string of encoded object
– $zj
: string of encoded json
– $zh
: string of encoded html entities, ie: ‘"’
Prefixes for Classes functions :
set
: setter, assign the parameter function value to a class member
get
: getter, returns something (can be the value of a class member)
is
: returns a boolean
I personnally never prefix private members/function with underscores (indicates the visibilty is not public, usually), or with the prefixes I used below for variables.
Because i usually put all members in protected, and almost all function in public : some can be protected, but it can also change with time. So I avoid borgin refactoring when I change the visibilty of something.