... | @@ -11,12 +11,11 @@ |
... | @@ -11,12 +11,11 @@ |
|
|
|
|
|
> __These standards are borrowed from the Symfony Standards. They are edited by Digitec when appropriate.__
|
|
> __These standards are borrowed from the Symfony Standards. They are edited by Digitec when appropriate.__
|
|
|
|
|
|
Remember that the main advantage of standards is that every piece of code looks and feels familiar, it's not about this or that being more readable.
|
|
|
|
|
|
|
|
|
|
|
|
KD7 will follow the standards defined in the PSR-0, PSR-1 and PSR-2 documents.
|
|
KD7 will follow the standards defined in the PSR-0, PSR-1 and PSR-2 documents.
|
|
|
|
|
|
|
|
All of the examples below have been edited to reflect Digitec changes.
|
|
|
|
|
|
|
|
Remember that the main advantage of standards is that every piece of code looks and feels familiar, it's not about this or that being more readable.
|
|
|
|
|
|
Since a picture - or some code - is worth a thousand words, here's a short example containing most features described below:
|
|
Since a picture - or some code - is worth a thousand words, here's a short example containing most features described below:
|
|
|
|
|
... | @@ -87,6 +86,7 @@ class FooBar { |
... | @@ -87,6 +86,7 @@ class FooBar { |
|
```
|
|
```
|
|
|
|
|
|
### Structure
|
|
### Structure
|
|
|
|
|
|
* Add a single space after each comma delimiter;
|
|
* Add a single space after each comma delimiter;
|
|
|
|
|
|
* Add a single space around operators (==, &&, ...);
|
|
* Add a single space around operators (==, &&, ...);
|
... | @@ -109,13 +109,14 @@ class FooBar { |
... | @@ -109,13 +109,14 @@ class FooBar { |
|
|
|
|
|
|
|
|
|
### Naming Conventions
|
|
### Naming Conventions
|
|
|
|
|
|
* Use camelCase, not underscores, for variable, function and method names, arguments;
|
|
* Use camelCase, not underscores, for variable, function and method names, arguments;
|
|
|
|
|
|
* Use underscores for option names and parameter names;
|
|
* Use underscores for option names and parameter names;
|
|
|
|
|
|
* Use namespaces for all classes;
|
|
* Use namespaces for all classes;
|
|
|
|
|
|
* Prefix abstract classes with Abstract. Please note some early Symfony2 classes do not follow this convention and have not been renamed for backward compatibility reasons. However all new abstract classes must follow this naming convention;
|
|
* Prefix abstract classes with Abstract;
|
|
|
|
|
|
* Suffix interfaces with Interface;
|
|
* Suffix interfaces with Interface;
|
|
|
|
|
... | @@ -127,8 +128,6 @@ class FooBar { |
... | @@ -127,8 +128,6 @@ class FooBar { |
|
|
|
|
|
* Don't forget to look at the more verbose Conventions document for more subjective naming considerations.
|
|
* Don't forget to look at the more verbose Conventions document for more subjective naming considerations.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Documentation
|
|
### Documentation
|
|
|
|
|
|
* Add PHPDoc blocks for all classes, methods, and functions;
|
|
* Add PHPDoc blocks for all classes, methods, and functions;
|
... | @@ -194,8 +193,7 @@ proposed standards are autoloaded. |
... | @@ -194,8 +193,7 @@ proposed standards are autoloaded. |
|
```php
|
|
```php
|
|
<?php
|
|
<?php
|
|
|
|
|
|
function autoload($className)
|
|
function autoload($className) {
|
|
{
|
|
|
|
$className = ltrim($className, '\\');
|
|
$className = ltrim($className, '\\');
|
|
$fileName = '';
|
|
$fileName = '';
|
|
$namespace = '';
|
|
$namespace = '';
|
... | @@ -225,8 +223,6 @@ standards proposed above. It is the current recommended way to load PHP |
... | @@ -225,8 +223,6 @@ standards proposed above. It is the current recommended way to load PHP |
|
|
|
|
|
[PSR-1](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
|
|
[PSR-1](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
|
|
|
|
|
|
- ~~Opening braces for classes MUST go on the next line, and closing braces MUST go on the next line after the body.~~
|
|
|
|
- ~~Opening braces for methods MUST go on the next line, and closing braces MUST go on the next line after the body.~~
|
|
|
|
|
|
|
|
Basic Coding Standard
|
|
Basic Coding Standard
|
|
=====================
|
|
=====================
|
... | @@ -247,7 +243,9 @@ interpreted as described in [RFC 2119]. |
... | @@ -247,7 +243,9 @@ interpreted as described in [RFC 2119]. |
|
1. Overview
|
|
1. Overview
|
|
-----------
|
|
-----------
|
|
|
|
|
|
- Files MUST use only `<?php` and `<?=` tags.
|
|
- Files MUST use only `<?php` ~~and `<?=`~~ tags.
|
|
|
|
|
|
|
|
> Digitec code will only use the `<?php` tag.
|
|
|
|
|
|
- Files MUST use only UTF-8 without BOM for PHP code.
|
|
- Files MUST use only UTF-8 without BOM for PHP code.
|
|
|
|
|
... | @@ -269,7 +267,7 @@ interpreted as described in [RFC 2119]. |
... | @@ -269,7 +267,7 @@ interpreted as described in [RFC 2119]. |
|
|
|
|
|
### 2.1. PHP Tags
|
|
### 2.1. PHP Tags
|
|
|
|
|
|
PHP code MUST use the long `<?php ?>` tags or the short-echo `<?= ?>` tags; it
|
|
PHP code MUST use the long `<?php ?>` tags ~~or the short-echo `<?= ?>` tags~~ ; it
|
|
MUST NOT use the other tag variations.
|
|
MUST NOT use the other tag variations.
|
|
|
|
|
|
### 2.2. Character Encoding
|
|
### 2.2. Character Encoding
|
... | @@ -450,12 +448,16 @@ interpreted as described in [RFC 2119]. |
... | @@ -450,12 +448,16 @@ interpreted as described in [RFC 2119]. |
|
- There MUST be one blank line after the `namespace` declaration, and there
|
|
- There MUST be one blank line after the `namespace` declaration, and there
|
|
MUST be one blank line after the block of `use` declarations.
|
|
MUST be one blank line after the block of `use` declarations.
|
|
|
|
|
|
- Opening braces for classes MUST go on the next line, and closing braces MUST
|
|
- Opening braces for classes MUST go on the ~~next~~ __same__ line, and closing braces MUST
|
|
go on the next line after the body.
|
|
go on the next line after the body.
|
|
|
|
|
|
- Opening braces for methods MUST go on the next line, and closing braces MUST
|
|
> In Digitec code, the opening brace for classes MUST go on the same line.
|
|
|
|
|
|
|
|
- Opening braces for methods MUST go on the ~~next~~ __same__ line, and closing braces MUST
|
|
go on the next line after the body.
|
|
go on the next line after the body.
|
|
|
|
|
|
|
|
> In Digitec code, the opening brace for methods MUST go on the same line.
|
|
|
|
|
|
- Visibility MUST be declared on all properties and methods; `abstract` and
|
|
- Visibility MUST be declared on all properties and methods; `abstract` and
|
|
`final` MUST be declared before the visibility; `static` MUST be declared
|
|
`final` MUST be declared before the visibility; `static` MUST be declared
|
|
after the visibility.
|
|
after the visibility.
|
... | @@ -1037,187 +1039,6 @@ Future recommendations MAY revise and extend this guide to address those or |
... | @@ -1037,187 +1039,6 @@ Future recommendations MAY revise and extend this guide to address those or |
|
other elements of style and practice.
|
|
other elements of style and practice.
|
|
|
|
|
|
|
|
|
|
Appendix A. Survey
|
|
|
|
------------------
|
|
|
|
|
|
|
|
In writing this style guide, the group took a survey of member projects to
|
|
|
|
determine common practices. The survey is retained herein for posterity.
|
|
|
|
|
|
|
|
### A.1. Survey Data
|
|
|
|
|
|
|
|
url,http://www.horde.org/apps/horde/docs/CODING_STANDARDS,http://pear.php.net/manual/en/standards.php,http://solarphp.com/manual/appendix-standards.style,http://framework.zend.com/manual/en/coding-standard.html,http://symfony.com/doc/2.0/contributing/code/standards.html,http://www.ppi.io/docs/coding-standards.html,https://github.com/ezsystems/ezp-next/wiki/codingstandards,http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html,https://github.com/UnionOfRAD/lithium/wiki/Spec%3A-Coding,http://drupal.org/coding-standards,http://code.google.com/p/sabredav/,http://area51.phpbb.com/docs/31x/coding-guidelines.html,https://docs.google.com/a/zikula.org/document/edit?authkey=CPCU0Us&hgd=1&id=1fcqb93Sn-hR9c0mkN6m_tyWnmEvoswKBtSc0tKkZmJA,http://www.chisimba.com,n/a,https://github.com/Respect/project-info/blob/master/coding-standards-sample.php,n/a,Object Calisthenics for PHP,http://doc.nette.org/en/coding-standard,http://flow3.typo3.org,https://github.com/propelorm/Propel2/wiki/Coding-Standards,http://developer.joomla.org/coding-standards.html
|
|
|
|
voting,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,no,no,no,?,yes,no,yes
|
|
|
|
indent_type,4,4,4,4,4,tab,4,tab,tab,2,4,tab,4,4,4,4,4,4,tab,tab,4,tab
|
|
|
|
line_length_limit_soft,75,75,75,75,no,85,120,120,80,80,80,no,100,80,80,?,?,120,80,120,no,150
|
|
|
|
line_length_limit_hard,85,85,85,85,no,no,no,no,100,?,no,no,no,100,100,?,120,120,no,no,no,no
|
|
|
|
class_names,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,studly,lower_under,studly,lower,studly,studly,studly,studly,?,studly,studly,studly
|
|
|
|
class_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,next,next,next,next,next,next,same,next,next
|
|
|
|
constant_names,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper,upper
|
|
|
|
true_false_null,lower,lower,lower,lower,lower,lower,lower,lower,lower,upper,lower,lower,lower,upper,lower,lower,lower,lower,lower,upper,lower,lower
|
|
|
|
method_names,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel,lower_under,camel,camel,camel,camel,camel,camel,camel,camel,camel,camel
|
|
|
|
method_brace_line,next,next,next,next,next,same,next,same,same,same,same,next,next,same,next,next,next,next,next,same,next,next
|
|
|
|
control_brace_line,same,same,same,same,same,same,next,same,same,same,same,next,same,same,next,same,same,same,same,same,same,next
|
|
|
|
control_space_after,yes,yes,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes,yes
|
|
|
|
always_use_control_braces,yes,yes,yes,yes,yes,yes,no,yes,yes,yes,no,yes,yes,yes,yes,no,yes,yes,yes,yes,yes,yes
|
|
|
|
else_elseif_line,same,same,same,same,same,same,next,same,same,next,same,next,same,next,next,same,same,same,same,same,same,next
|
|
|
|
case_break_indent_from_switch,0/1,0/1,0/1,1/2,1/2,1/2,1/2,1/1,1/1,1/2,1/2,1/1,1/2,1/2,1/2,1/2,1/2,1/2,0/1,1/1,1/2,1/2
|
|
|
|
function_space_after,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no,no
|
|
|
|
closing_php_tag_required,no,no,no,no,no,no,no,no,yes,no,no,no,no,yes,no,no,no,no,no,yes,no,no
|
|
|
|
line_endings,LF,LF,LF,LF,LF,LF,LF,LF,?,LF,?,LF,LF,LF,LF,?,,LF,?,LF,LF,LF
|
|
|
|
static_or_visibility_first,static,?,static,either,either,either,visibility,visibility,visibility,either,static,either,?,visibility,?,?,either,either,visibility,visibility,static,?
|
|
|
|
control_space_parens,no,no,no,no,no,no,yes,no,no,no,no,no,no,yes,?,no,no,no,no,no,no,no
|
|
|
|
blank_line_after_php,no,no,no,no,yes,no,no,no,no,yes,yes,no,no,yes,?,yes,yes,no,yes,no,yes,no
|
|
|
|
class_method_control_brace,next/next/same,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/next,same/same/same,same/same/same,same/same/same,same/same/same,next/next/next,next/next/same,next/same/same,next/next/next,next/next/same,next/next/same,next/next/same,next/next/same,same/same/same,next/next/same,next/next/next
|
|
|
|
|
|
|
|
### A.2. Survey Legend
|
|
|
|
|
|
|
|
`indent_type`:
|
|
|
|
The type of indenting. `tab` = "Use a tab", `2` or `4` = "number of spaces"
|
|
|
|
|
|
|
|
`line_length_limit_soft`:
|
|
|
|
The "soft" line length limit, in characters. `?` = not discernible or no response, `no` means no limit.
|
|
|
|
|
|
|
|
`line_length_limit_hard`:
|
|
|
|
The "hard" line length limit, in characters. `?` = not discernible or no response, `no` means no limit.
|
|
|
|
|
|
|
|
`class_names`:
|
|
|
|
How classes are named. `lower` = lowercase only, `lower_under` = lowercase with underscore separators, `studly` = StudlyCase.
|
|
|
|
|
|
|
|
`class_brace_line`:
|
|
|
|
Does the opening brace for a class go on the `same` line as the class keyword, or on the `next` line after it?
|
|
|
|
|
|
|
|
`constant_names`:
|
|
|
|
How are class constants named? `upper` = Uppercase with underscore separators.
|
|
|
|
|
|
|
|
`true_false_null`:
|
|
|
|
Are the `true`, `false`, and `null` keywords spelled as all `lower` case, or all `upper` case?
|
|
|
|
|
|
|
|
`method_names`:
|
|
|
|
How are methods named? `camel` = `camelCase`, `lower_under` = lowercase with underscore separators.
|
|
|
|
|
|
|
|
`method_brace_line`:
|
|
|
|
Does the opening brace for a method go on the `same` line as the method name, or on the `next` line?
|
|
|
|
|
|
|
|
`control_brace_line`:
|
|
|
|
Does the opening brace for a control structure go on the `same` line, or on the `next` line?
|
|
|
|
|
|
|
|
`control_space_after`:
|
|
|
|
Is there a space after the control structure keyword?
|
|
|
|
|
|
|
|
`always_use_control_braces`:
|
|
|
|
Do control structures always use braces?
|
|
|
|
|
|
|
|
`else_elseif_line`:
|
|
|
|
When using `else` or `elseif`, does it go on the `same` line as the previous closing brace, or does it go on the `next` line?
|
|
|
|
|
|
|
|
`case_break_indent_from_switch`:
|
|
|
|
How many times are `case` and `break` indented from an opening `switch` statement?
|
|
|
|
|
|
|
|
`function_space_after`:
|
|
|
|
Do function calls have a space after the function name and before the opening parenthesis?
|
|
|
|
|
|
|
|
`closing_php_tag_required`:
|
|
|
|
In files containing only PHP, is the closing `?>` tag required?
|
|
|
|
|
|
|
|
`line_endings`:
|
|
|
|
What type of line ending is used?
|
|
|
|
|
|
|
|
`static_or_visibility_first`:
|
|
|
|
When declaring a method, does `static` come first, or does the visibility come first?
|
|
|
|
|
|
|
|
`control_space_parens`:
|
|
|
|
In a control structure expression, is there a space after the opening parenthesis and a space before the closing parenthesis? `yes` = `if ( $expr )`, `no` = `if ($expr)`.
|
|
|
|
|
|
|
|
`blank_line_after_php`:
|
|
|
|
Is there a blank line after the opening PHP tag?
|
|
|
|
|
|
|
|
`class_method_control_brace`:
|
|
|
|
A summary of what line the opening braces go on for classes, methods, and control structures.
|
|
|
|
|
|
|
|
### A.3. Survey Results
|
|
|
|
|
|
|
|
indent_type:
|
|
|
|
tab: 7
|
|
|
|
2: 1
|
|
|
|
4: 14
|
|
|
|
line_length_limit_soft:
|
|
|
|
?: 2
|
|
|
|
no: 3
|
|
|
|
75: 4
|
|
|
|
80: 6
|
|
|
|
85: 1
|
|
|
|
100: 1
|
|
|
|
120: 4
|
|
|
|
150: 1
|
|
|
|
line_length_limit_hard:
|
|
|
|
?: 2
|
|
|
|
no: 11
|
|
|
|
85: 4
|
|
|
|
100: 3
|
|
|
|
120: 2
|
|
|
|
class_names:
|
|
|
|
?: 1
|
|
|
|
lower: 1
|
|
|
|
lower_under: 1
|
|
|
|
studly: 19
|
|
|
|
class_brace_line:
|
|
|
|
next: 16
|
|
|
|
same: 6
|
|
|
|
constant_names:
|
|
|
|
upper: 22
|
|
|
|
true_false_null:
|
|
|
|
lower: 19
|
|
|
|
upper: 3
|
|
|
|
method_names:
|
|
|
|
camel: 21
|
|
|
|
lower_under: 1
|
|
|
|
method_brace_line:
|
|
|
|
next: 15
|
|
|
|
same: 7
|
|
|
|
control_brace_line:
|
|
|
|
next: 4
|
|
|
|
same: 18
|
|
|
|
control_space_after:
|
|
|
|
no: 2
|
|
|
|
yes: 20
|
|
|
|
always_use_control_braces:
|
|
|
|
no: 3
|
|
|
|
yes: 19
|
|
|
|
else_elseif_line:
|
|
|
|
next: 6
|
|
|
|
same: 16
|
|
|
|
case_break_indent_from_switch:
|
|
|
|
0/1: 4
|
|
|
|
1/1: 4
|
|
|
|
1/2: 14
|
|
|
|
function_space_after:
|
|
|
|
no: 22
|
|
|
|
closing_php_tag_required:
|
|
|
|
no: 19
|
|
|
|
yes: 3
|
|
|
|
line_endings:
|
|
|
|
?: 5
|
|
|
|
LF: 17
|
|
|
|
static_or_visibility_first:
|
|
|
|
?: 5
|
|
|
|
either: 7
|
|
|
|
static: 4
|
|
|
|
visibility: 6
|
|
|
|
control_space_parens:
|
|
|
|
?: 1
|
|
|
|
no: 19
|
|
|
|
yes: 2
|
|
|
|
blank_line_after_php:
|
|
|
|
?: 1
|
|
|
|
no: 13
|
|
|
|
yes: 8
|
|
|
|
class_method_control_brace:
|
|
|
|
next/next/next: 4
|
|
|
|
next/next/same: 11
|
|
|
|
next/same/same: 1
|
|
|
|
same/same/same: 6
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
---
|
|
|
|
|
|
###### References
|
|
###### References
|
... | | ... | |