2 Coding Standards
# Adding new features
No new features should be added, without having their own tests - which should be passed before committing them to the repository.
# Indentation
One tab will be used for indentation.
So, indentation should look like this:
<?php
// base level
// level 1
// level 2
// level 1
// base level
?> <?php// base level// level 1// level 2// level 1// base level?>
Or:
$booleanVariable = true;
$stringVariable = "moose";
if ($booleanVariable) {
echo "Boolean value is true";
if ($stringVariable = "moose") {
echo "We have encountered a moose";
}
}
$booleanVariable = true;$stringVariable = "moose";if ($booleanVariable) {echo "Boolean value is true";if ($stringVariable = "moose") {echo "We have encountered a moose";}}
# Function Calls
Functions should be called without space between function's name and starting bracket. There should be one space between every parameter of a function call.
<?php $var = foo($bar, $bar2, $bar3); ?>
<?php$var = foo($bar, $bar2, $bar3);?>
As you can see above there should be one space on both sides of equals sign (=). To increase the readability of the code you can add spaces (or tabs) before the equals sign, but only in the case of a multiple function call presented below:
<?php $varShort = foo($bar1); $variableLong = foo($bar1); ?>
<?php$varShort = foo($bar1);$variableLong = foo($bar1);?>
# Commenting code
All comments should be written in English, and should in a clear way describe the commented block of code.
Comments can include the following phpDocumentor tags:
- @access
- @author
- @copyright
- @deprecated
- @example
- @ignore
- @internal
- @link
- @see
- @since
- @tutorial
- @version
- inline {@internal}}
- inline {@inheritdoc}}
- inline {@link}}
PhpDoc tags are very much like JavaDoc tags in Java. Tags are only processed if they are the first thing in a DocBlock line, for example:
<?php /** * Tag example. * @author this tag is parsed, but this @version is ignored * @version 1.0 this tag is also parsed */ ?>
<?php/*** Tag example.* @author this tag is parsed, but this @version is ignored* @version 1.0 this tag is also parsed*/?>
There are 3 inline tags ({@internal}}, {@inheritdoc}} and {@link}}).
<?php
/**
* Example of inline phpDoc tags.
*
* This function works hard with {@link foo()} to rule the world.
*/
function bar() {
}
function foo() {
}
?> <?php/*** Example of inline phpDoc tags.** This function works hard with {@link foo()} to rule the world.*/function bar() {}function foo() {}?>
# Including files
When including files with classes or libraries, use only and always the require_once function.
# PHP tags
Always use long tags (<?php ?>) Instead of short tags (<? ?>).
# Naming convention
# Functions
Write all functions in camel case
<?php
function longFunctionName() {
}
?> <?phpfunction longFunctionName() {}?>
# Classes
Class names should be written in CamelCase, for example:
<?php
class ExampleClass {
}
?> <?phpclass ExampleClass {}?>
# Variables
Variable names should be as descriptive as possible, but also as short as possible. Normal variables should start with a lowercase letter, and should be written in camelBack? in case of multiple words. Variables containing objects should start with a capital letter, and in some way associate to the class the variable is an object of. Example:
<?php
$user = 'John';
$users = array('John', 'Hans', 'Arne');
$Dispatcher = new Dispatcher();
?> <?php$user = 'John';$users = array('John', 'Hans', 'Arne');$Dispatcher = new Dispatcher();?>
# Member visibility
As we cannot use PHP5's private and protected keywords for methods or variables, we agree on following rules:
- A protected method or variable name start with a single underscore ("_"). Example:
<?php class A { var _iAmAProtectedVariable; function _iAmAProtectedMethod() { /*...*/ } } ?><?phpclass A {var _iAmAProtectedVariable;function _iAmAProtectedMethod() {/*...*/}}?>
- A private method or variable name start with double underscore ("__"). Example:
<?php
class A {
var __iAmAPrivateVariable;
function __iAmAPrivateMethod() {
/*...*/
}
}
?>
<?phpclass A {var __iAmAPrivateVariable;function __iAmAPrivateMethod() {/*...*/}}?>
# Example addresses
For all example URL and mail addresses use "example.com", "example.org" and "example.net", for example:
- Email: someone@example.com
- WWW: http://www.example.com
- FTP: ftp://ftp.example.com
# Files
File names should be created with lower case. If a file name consist of multiple words, they should be divided by an underscore character, for example:
long_file_name.php
# Variable types
Variable types for use in DocBlocks:
| Type | Description |
|---|---|
| mixed | A variable with undefined (or multiple) type. |
| integer | Integer type variable (whole number). |
| float | Float type (point number). |
| boolean | Logical type (true or false). |
| string | String type (any value in "" or ' '). |
| array | Array type. |
| object | Object type. |
| resource | Resource type (returned by for example mysql_connect()). |
Remember that when you specify the type as mixed, you should indicate whether it is unknown, or what the possible types are.
# Constants
Constants should be defined in capital letters:
<?php
define('CONSTANT', 1);
?>
<?phpdefine('CONSTANT', 1);?>
If a constant name consists of multiple words, they should be separated by an underscore character, for example:
<?php
define('LONG_NAMED_CONSTANT', 2);
?>
<?phpdefine('LONG_NAMED_CONSTANT', 2);?>
