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
$i: int (signed)
$n: natural (unsigned int)
$fd: float round to 1 decimals
$fc: float round to 2 decimals
$fm: float round to 3 decimals
$v: void / null.
Non-scalar prefix types
$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.
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 :
$ts : timestamp (unsigned int)
$dt : datetime, format ‘Y-m-d H:i:s’ (string)
$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.