Use soft-tabs instead of hard-tabs, ie. do not use spaces when indenting code. Spaces can be used to indent 3/4, 1/2 and 1/4 of a tab, but not as primary means of indenting code. The tabs makes indenting easier, because there is no risk of starting an indent block on the 7th space instead of the 8th. You also save 3 chars for each tab (vs 4 spaces).
Use 4 spaces as tab length.
False and true should be written in lowercase, this because of two reasons: the uppercase variants take too much attention and they are also aliases for the lowercase variants.
Use syntax highlighting which displays boolean values in a distinguished color and/or in italic/bold instead.
All other constants should be uppercase only, NO CamelCasedConstants – use UNDERSCORED_TEXT instead. Descriptive names is a must!
All operators should be preceded and succeeded with a single space (even when just inside the parenthesis):
if( ! empty($foo))
OR should be used instead of ||
&& should be used instead of AND
In all types of lists (eg. arrays and parameter lists) should the separating commas ALWAYS be followed by a space.
Use the RegEx at the end to fix this.
Brackets are placed on the line following a control structure, with the same amount of indentation as the line with the control structure.
Bracketless control structures should be avoided, because you’ll never know when you need to add something extra in the associated block.
It should not be any spaces inside the parentheses following the control structure, neither should it be any space after the name of the control structure.
// wrong:
if ( somecondition )
{
echo “foobar”;
}
// correct:
if(somecondition)
{
echo “foobar”;
}
The reason is that the spaces call too much attention to the if and somecondition.
The ending tag should be skipped in PHP-only files, to avoid “Cannot modify header information – headers already sent” errors.
To clarify that the file ends, add this at the end:
/* End of file myfile.php /
/ Location: ./project/path/to/file */
Always use UTF-8 encoding with unix style linebreaks (LF, not CRLF)
This makes it easier to locate classes and makes it easier to work on them. Excepting classes with limited length (<30 lines) which is closely related with the other one(s) in the same file, same goes for utility functions (if you have a few utility classes/functions, consider putting them in a separate file).
Name the file after the class, with the exception that the first char is uppercase and the rest lowercase.
Use underscored_names instead of camelCasedNames, this to make them easier to read.
Use PHPdoc-style doc-comments for all functions and methods. Add a short line describing what it does, then the types of accepted parameters and the expected output type.
Group them after what they do, not their name (IDEs and editors have good search functions nowadays).
Do not use spaces around or just inside the parentheses.
func(‘arg’, ‘arg2’);
// not:
func ( ‘arg’, ‘arg2’ );
// or
func( ‘arg’,‘arg2’ );
Use them where it is possible, and do not use default values for a required parameter.
Use an empty line + separator line (indented) + empty line to separate methods from each other.
separator line:
// -————————————————————————————————-
Should be placed in the top of the class and documented with a PHP doc comment which describes what it contains and the variable type. Separate properties with an empty line.
Separate the properties section from the method section with empty line + separator line (indented) + empty line.
They should be placed directly after the properties, to make them easy to find.
If you are coding for PHP 5, use __construct() as the constructor name.
Should be placed after the constructor/magic methods.
They should be placed last, with the utility methods at the end.
Always write SQL keywords in uppercase, the same with built-in database functions (like COUNT and CONCAT).
Always escape foreign data.
Use useful error messages, so even a poorly experienced user can understand it.
A few useful regular expressions for code.
Ignore the surrounding citation marks, they define the beginning/end of the search/replace.
Search: “,(\S)” Replace: “, $1”
Search: “(?<=^|\S)[\t ]+$” Replace: “”