| ... | ... | @@ -143,16 +143,6 @@ class FooBar { | 
| 
 | 
 | 
 | 
| 
 | 
 | 
## [PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.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.~~
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
[PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Autoloading Standard
 | 
| 
 | 
 | 
====================
 | 
| 
 | 
 | 
 | 
| ... | ... | @@ -227,3 +217,1012 @@ The following gist is a sample SplClassLoader implementation that can | 
| 
 | 
 | 
load your classes if you follow the autoloader interoperability
 | 
| 
 | 
 | 
standards proposed above. It is the current recommended way to load PHP
 | 
| 
 | 
 | 
5.3 classes that follow these standards.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
---
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
[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
 | 
| 
 | 
 | 
=====================
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This section of the standard comprises what should be considered the standard
 | 
| 
 | 
 | 
coding elements that are required to ensure a high level of technical
 | 
| 
 | 
 | 
interoperability between shared PHP code.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
 | 
| 
 | 
 | 
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
 | 
| 
 | 
 | 
interpreted as described in [RFC 2119].
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
[RFC 2119]: http://www.ietf.org/rfc/rfc2119.txt
 | 
| 
 | 
 | 
[PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
 | 
| 
 | 
 | 
[PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
1. Overview
 | 
| 
 | 
 | 
-----------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Files MUST use only `<?php` and `<?=` tags.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Files MUST use only UTF-8 without BOM for PHP code.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Files SHOULD *either* declare symbols (classes, functions, constants, etc.)
 | 
| 
 | 
 | 
  *or* cause side-effects (e.g. generate output, change .ini settings, etc.)
 | 
| 
 | 
 | 
  but SHOULD NOT do both.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Namespaces and classes MUST follow an "autoloading" PSR: [[PSR-0], [PSR-4]].
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Class names MUST be declared in `StudlyCaps`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Class constants MUST be declared in all upper case with underscore separators.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Method names MUST be declared in `camelCase`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
2. Files
 | 
| 
 | 
 | 
--------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.1. PHP Tags
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
PHP code MUST use the long `<?php ?>` tags or the short-echo `<?= ?>` tags; it
 | 
| 
 | 
 | 
MUST NOT use the other tag variations.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.2. Character Encoding
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
PHP code MUST use only UTF-8 without BOM.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.3. Side Effects
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A file SHOULD declare new symbols (classes, functions, constants,
 | 
| 
 | 
 | 
etc.) and cause no other side effects, or it SHOULD execute logic with side
 | 
| 
 | 
 | 
effects, but SHOULD NOT do both.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The phrase "side effects" means execution of logic not directly related to
 | 
| 
 | 
 | 
declaring classes, functions, constants, etc., *merely from including the
 | 
| 
 | 
 | 
file*.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
"Side effects" include but are not limited to: generating output, explicit
 | 
| 
 | 
 | 
use of `require` or `include`, connecting to external services, modifying ini
 | 
| 
 | 
 | 
settings, emitting errors or exceptions, modifying global or static variables,
 | 
| 
 | 
 | 
reading from or writing to a file, and so on.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The following is an example of a file with both declarations and side effects;
 | 
| 
 | 
 | 
i.e, an example of what to avoid:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
// side effect: change ini settings
 | 
| 
 | 
 | 
ini_set('error_reporting', E_ALL);
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
// side effect: loads a file
 | 
| 
 | 
 | 
include "file.php";
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
// side effect: generates output
 | 
| 
 | 
 | 
echo "<html>\n";
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
// declaration
 | 
| 
 | 
 | 
function foo()
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    // function body
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The following example is of a file that contains declarations without side
 | 
| 
 | 
 | 
effects; i.e., an example of what to emulate:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
// declaration
 | 
| 
 | 
 | 
function foo()
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    // function body
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
// conditional declaration is *not* a side effect
 | 
| 
 | 
 | 
if (! function_exists('bar')) {
 | 
| 
 | 
 | 
    function bar()
 | 
| 
 | 
 | 
    {
 | 
| 
 | 
 | 
        // function body
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
3. Namespace and Class Names
 | 
| 
 | 
 | 
----------------------------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Namespaces and classes MUST follow [PSR-0].
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This means each class is in a file by itself, and is in a namespace of at
 | 
| 
 | 
 | 
least one level: a top-level vendor name.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Class names MUST be declared in `StudlyCaps`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Code written for PHP 5.3 and after MUST use formal namespaces.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
For example:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
// PHP 5.3 and later:
 | 
| 
 | 
 | 
namespace Vendor\Model;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class Foo
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Code written for 5.2.x and before SHOULD use the pseudo-namespacing convention
 | 
| 
 | 
 | 
of `Vendor_` prefixes on class names.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
// PHP 5.2.x and earlier:
 | 
| 
 | 
 | 
class Vendor_Model_Foo
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
4. Class Constants, Properties, and Methods
 | 
| 
 | 
 | 
-------------------------------------------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The term "class" refers to all classes, interfaces, and traits.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.1. Constants
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Class constants MUST be declared in all upper case with underscore separators.
 | 
| 
 | 
 | 
For example:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Model;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class Foo
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    const VERSION = '1.0';
 | 
| 
 | 
 | 
    const DATE_APPROVED = '2012-06-01';
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.2. Properties
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This guide intentionally avoids any recommendation regarding the use of
 | 
| 
 | 
 | 
`$StudlyCaps`, `$camelCase`, or `$under_score` property names.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Whatever naming convention is used SHOULD be applied consistently within a
 | 
| 
 | 
 | 
reasonable scope. That scope may be vendor-level, package-level, class-level,
 | 
| 
 | 
 | 
or method-level.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.3. Methods
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Method names MUST be declared in `camelCase()`.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
---
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
[PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Coding Style Guide
 | 
| 
 | 
 | 
==================
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This guide extends and expands on [PSR-1], the basic coding standard.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The intent of this guide is to reduce cognitive friction when scanning code
 | 
| 
 | 
 | 
from different authors. It does so by enumerating a shared set of rules and
 | 
| 
 | 
 | 
expectations about how to format PHP code.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The style rules herein are derived from commonalities among the various member
 | 
| 
 | 
 | 
projects. When various authors collaborate across multiple projects, it helps
 | 
| 
 | 
 | 
to have one set of guidelines to be used among all those projects. Thus, the
 | 
| 
 | 
 | 
benefit of this guide is not in the rules themselves, but in the sharing of
 | 
| 
 | 
 | 
those rules.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
 | 
| 
 | 
 | 
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
 | 
| 
 | 
 | 
interpreted as described in [RFC 2119].
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
[RFC 2119]: http://www.ietf.org/rfc/rfc2119.txt
 | 
| 
 | 
 | 
[PSR-0]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
 | 
| 
 | 
 | 
[PSR-1]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
1. Overview
 | 
| 
 | 
 | 
-----------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Code MUST follow a "coding style guide" PSR [[PSR-1]].
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Code MUST use 4 spaces for indenting, not tabs.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- There MUST NOT be a hard limit on line length; the soft limit MUST be 120
 | 
| 
 | 
 | 
  characters; lines SHOULD be 80 characters or less.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- There MUST be one blank line after the `namespace` declaration, and there
 | 
| 
 | 
 | 
  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
 | 
| 
 | 
 | 
  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.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Visibility MUST be declared on all properties and methods; `abstract` and
 | 
| 
 | 
 | 
  `final` MUST be declared before the visibility; `static` MUST be declared
 | 
| 
 | 
 | 
  after the visibility.
 | 
| 
 | 
 | 
  
 | 
| 
 | 
 | 
- Control structure keywords MUST have one space after them; method and
 | 
| 
 | 
 | 
  function calls MUST NOT.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Opening braces for control structures MUST go on the same line, and closing
 | 
| 
 | 
 | 
  braces MUST go on the next line after the body.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Opening parentheses for control structures MUST NOT have a space after them,
 | 
| 
 | 
 | 
  and closing parentheses for control structures MUST NOT have a space before.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 1.1. Example
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
This example encompasses some of the rules below as a quick overview:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
use FooInterface;
 | 
| 
 | 
 | 
use BarClass as Bar;
 | 
| 
 | 
 | 
use OtherVendor\OtherPackage\BazClass;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class Foo extends Bar implements FooInterface
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    public function sampleFunction($a, $b = null)
 | 
| 
 | 
 | 
    {
 | 
| 
 | 
 | 
        if ($a === $b) {
 | 
| 
 | 
 | 
            bar();
 | 
| 
 | 
 | 
        } elseif ($a > $b) {
 | 
| 
 | 
 | 
            $foo->bar($arg1);
 | 
| 
 | 
 | 
        } else {
 | 
| 
 | 
 | 
            BazClass::bar($arg2, $arg3);
 | 
| 
 | 
 | 
        }
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
    final public static function bar()
 | 
| 
 | 
 | 
    {
 | 
| 
 | 
 | 
        // method body
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
2. General
 | 
| 
 | 
 | 
----------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.1 Basic Coding Standard
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Code MUST follow all rules outlined in [PSR-1].
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.2 Files
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
All PHP files MUST use the Unix LF (linefeed) line ending.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
All PHP files MUST end with a single blank line.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The closing `?>` tag MUST be omitted from files containing only PHP.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.3. Lines
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST NOT be a hard limit on line length.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The soft limit on line length MUST be 120 characters; automated style checkers
 | 
| 
 | 
 | 
MUST warn but MUST NOT error at the soft limit.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Lines SHOULD NOT be longer than 80 characters; lines longer than that SHOULD
 | 
| 
 | 
 | 
be split into multiple subsequent lines of no more than 80 characters each.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST NOT be trailing whitespace at the end of non-blank lines.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Blank lines MAY be added to improve readability and to indicate related
 | 
| 
 | 
 | 
blocks of code.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST NOT be more than one statement per line.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.4. Indenting
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Code MUST use an indent of 4 spaces, and MUST NOT use tabs for indenting.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
> N.b.: Using only spaces, and not mixing spaces with tabs, helps to avoid
 | 
| 
 | 
 | 
> problems with diffs, patches, history, and annotations. The use of spaces
 | 
| 
 | 
 | 
> also makes it easy to insert fine-grained sub-indentation for inter-line 
 | 
| 
 | 
 | 
> alignment.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 2.5. Keywords and True/False/Null
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
PHP [keywords] MUST be in lower case.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The PHP constants `true`, `false`, and `null` MUST be in lower case.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
[keywords]: http://php.net/manual/en/reserved.keywords.php
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
3. Namespace and Use Declarations
 | 
| 
 | 
 | 
---------------------------------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When present, there MUST be one blank line after the `namespace` declaration.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When present, all `use` declarations MUST go after the `namespace`
 | 
| 
 | 
 | 
declaration.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST be one `use` keyword per declaration.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST be one blank line after the `use` block.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
For example:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
use FooClass;
 | 
| 
 | 
 | 
use BarClass as Bar;
 | 
| 
 | 
 | 
use OtherVendor\OtherPackage\BazClass;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
// ... additional PHP code ...
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
4. Classes, Properties, and Methods
 | 
| 
 | 
 | 
-----------------------------------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The term "class" refers to all classes, interfaces, and traits.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.1. Extends and Implements
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The `extends` and `implements` keywords MUST be declared on the same line as
 | 
| 
 | 
 | 
the class name.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The opening brace for the class MUST go on its own line; the closing brace
 | 
| 
 | 
 | 
for the class MUST go on the next line after the body.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
use FooClass;
 | 
| 
 | 
 | 
use BarClass as Bar;
 | 
| 
 | 
 | 
use OtherVendor\OtherPackage\BazClass;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class ClassName extends ParentClass implements \ArrayAccess, \Countable
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    // constants, properties, methods
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Lists of `implements` MAY be split across multiple lines, where each
 | 
| 
 | 
 | 
subsequent line is indented once. When doing so, the first item in the list
 | 
| 
 | 
 | 
MUST be on the next line, and there MUST be only one interface per line.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
use FooClass;
 | 
| 
 | 
 | 
use BarClass as Bar;
 | 
| 
 | 
 | 
use OtherVendor\OtherPackage\BazClass;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class ClassName extends ParentClass implements
 | 
| 
 | 
 | 
    \ArrayAccess,
 | 
| 
 | 
 | 
    \Countable,
 | 
| 
 | 
 | 
    \Serializable
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    // constants, properties, methods
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.2. Properties
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Visibility MUST be declared on all properties.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The `var` keyword MUST NOT be used to declare a property.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST NOT be more than one property declared per statement.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Property names SHOULD NOT be prefixed with a single underscore to indicate
 | 
| 
 | 
 | 
protected or private visibility.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A property declaration looks like the following.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class ClassName
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    public $foo = null;
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.3. Methods
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Visibility MUST be declared on all methods.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Method names SHOULD NOT be prefixed with a single underscore to indicate
 | 
| 
 | 
 | 
protected or private visibility.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Method names MUST NOT be declared with a space after the method name. The
 | 
| 
 | 
 | 
opening brace MUST go on its own line, and the closing brace MUST go on the
 | 
| 
 | 
 | 
next line following the body. There MUST NOT be a space after the opening
 | 
| 
 | 
 | 
parenthesis, and there MUST NOT be a space before the closing parenthesis.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A method declaration looks like the following. Note the placement of
 | 
| 
 | 
 | 
parentheses, commas, spaces, and braces:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class ClassName
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
 | 
| 
 | 
 | 
    {
 | 
| 
 | 
 | 
        // method body
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```    
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.4. Method Arguments
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
In the argument list, there MUST NOT be a space before each comma, and there
 | 
| 
 | 
 | 
MUST be one space after each comma.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Method arguments with default values MUST go at the end of the argument
 | 
| 
 | 
 | 
list.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class ClassName
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    public function foo($arg1, &$arg2, $arg3 = [])
 | 
| 
 | 
 | 
    {
 | 
| 
 | 
 | 
        // method body
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Argument lists MAY be split across multiple lines, where each subsequent line
 | 
| 
 | 
 | 
is indented once. When doing so, the first item in the list MUST be on the
 | 
| 
 | 
 | 
next line, and there MUST be only one argument per line.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When the argument list is split across multiple lines, the closing parenthesis
 | 
| 
 | 
 | 
and opening brace MUST be placed together on their own line with one space
 | 
| 
 | 
 | 
between them.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
class ClassName
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    public function aVeryLongMethodName(
 | 
| 
 | 
 | 
        ClassTypeHint $arg1,
 | 
| 
 | 
 | 
        &$arg2,
 | 
| 
 | 
 | 
        array $arg3 = []
 | 
| 
 | 
 | 
    ) {
 | 
| 
 | 
 | 
        // method body
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.5. `abstract`, `final`, and `static`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When present, the `abstract` and `final` declarations MUST precede the
 | 
| 
 | 
 | 
visibility declaration.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When present, the `static` declaration MUST come after the visibility
 | 
| 
 | 
 | 
declaration.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
namespace Vendor\Package;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
abstract class ClassName
 | 
| 
 | 
 | 
{
 | 
| 
 | 
 | 
    protected static $foo;
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
    abstract protected function zim();
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
    final public static function bar()
 | 
| 
 | 
 | 
    {
 | 
| 
 | 
 | 
        // method body
 | 
| 
 | 
 | 
    }
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 4.6. Method and Function Calls
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When making a method or function call, there MUST NOT be a space between the
 | 
| 
 | 
 | 
method or function name and the opening parenthesis, there MUST NOT be a space
 | 
| 
 | 
 | 
after the opening parenthesis, and there MUST NOT be a space before the
 | 
| 
 | 
 | 
closing parenthesis. In the argument list, there MUST NOT be a space before
 | 
| 
 | 
 | 
each comma, and there MUST be one space after each comma.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
bar();
 | 
| 
 | 
 | 
$foo->bar($arg1);
 | 
| 
 | 
 | 
Foo::bar($arg2, $arg3);
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Argument lists MAY be split across multiple lines, where each subsequent line
 | 
| 
 | 
 | 
is indented once. When doing so, the first item in the list MUST be on the
 | 
| 
 | 
 | 
next line, and there MUST be only one argument per line.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
$foo->bar(
 | 
| 
 | 
 | 
    $longArgument,
 | 
| 
 | 
 | 
    $longerArgument,
 | 
| 
 | 
 | 
    $muchLongerArgument
 | 
| 
 | 
 | 
);
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
5. Control Structures
 | 
| 
 | 
 | 
---------------------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The general style rules for control structures are as follows:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- There MUST be one space after the control structure keyword
 | 
| 
 | 
 | 
- There MUST NOT be a space after the opening parenthesis
 | 
| 
 | 
 | 
- There MUST NOT be a space before the closing parenthesis
 | 
| 
 | 
 | 
- There MUST be one space between the closing parenthesis and the opening
 | 
| 
 | 
 | 
  brace
 | 
| 
 | 
 | 
- The structure body MUST be indented once
 | 
| 
 | 
 | 
- The closing brace MUST be on the next line after the body
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The body of each structure MUST be enclosed by braces. This standardizes how
 | 
| 
 | 
 | 
the structures look, and reduces the likelihood of introducing errors as new
 | 
| 
 | 
 | 
lines get added to the body.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 5.1. `if`, `elseif`, `else`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
An `if` structure looks like the following. Note the placement of parentheses,
 | 
| 
 | 
 | 
spaces, and braces; and that `else` and `elseif` are on the same line as the
 | 
| 
 | 
 | 
closing brace from the earlier body.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
if ($expr1) {
 | 
| 
 | 
 | 
    // if body
 | 
| 
 | 
 | 
} elseif ($expr2) {
 | 
| 
 | 
 | 
    // elseif body
 | 
| 
 | 
 | 
} else {
 | 
| 
 | 
 | 
    // else body;
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The keyword `elseif` SHOULD be used instead of `else if` so that all control
 | 
| 
 | 
 | 
keywords look like single words.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 5.2. `switch`, `case`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A `switch` structure looks like the following. Note the placement of
 | 
| 
 | 
 | 
parentheses, spaces, and braces. The `case` statement MUST be indented once
 | 
| 
 | 
 | 
from `switch`, and the `break` keyword (or other terminating keyword) MUST be
 | 
| 
 | 
 | 
indented at the same level as the `case` body. There MUST be a comment such as
 | 
| 
 | 
 | 
`// no break` when fall-through is intentional in a non-empty `case` body.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
switch ($expr) {
 | 
| 
 | 
 | 
    case 0:
 | 
| 
 | 
 | 
        echo 'First case, with a break';
 | 
| 
 | 
 | 
        break;
 | 
| 
 | 
 | 
    case 1:
 | 
| 
 | 
 | 
        echo 'Second case, which falls through';
 | 
| 
 | 
 | 
        // no break
 | 
| 
 | 
 | 
    case 2:
 | 
| 
 | 
 | 
    case 3:
 | 
| 
 | 
 | 
    case 4:
 | 
| 
 | 
 | 
        echo 'Third case, return instead of break';
 | 
| 
 | 
 | 
        return;
 | 
| 
 | 
 | 
    default:
 | 
| 
 | 
 | 
        echo 'Default case';
 | 
| 
 | 
 | 
        break;
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 5.3. `while`, `do while`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A `while` statement looks like the following. Note the placement of
 | 
| 
 | 
 | 
parentheses, spaces, and braces.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
while ($expr) {
 | 
| 
 | 
 | 
    // structure body
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Similarly, a `do while` statement looks like the following. Note the placement
 | 
| 
 | 
 | 
of parentheses, spaces, and braces.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
do {
 | 
| 
 | 
 | 
    // structure body;
 | 
| 
 | 
 | 
} while ($expr);
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 5.4. `for`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A `for` statement looks like the following. Note the placement of parentheses,
 | 
| 
 | 
 | 
spaces, and braces.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
for ($i = 0; $i < 10; $i++) {
 | 
| 
 | 
 | 
    // for body
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 5.5. `foreach`
 | 
| 
 | 
 | 
    
 | 
| 
 | 
 | 
A `foreach` statement looks like the following. Note the placement of
 | 
| 
 | 
 | 
parentheses, spaces, and braces.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
foreach ($iterable as $key => $value) {
 | 
| 
 | 
 | 
    // foreach body
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
### 5.6. `try`, `catch`
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A `try catch` block looks like the following. Note the placement of
 | 
| 
 | 
 | 
parentheses, spaces, and braces.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
try {
 | 
| 
 | 
 | 
    // try body
 | 
| 
 | 
 | 
} catch (FirstExceptionType $e) {
 | 
| 
 | 
 | 
    // catch body
 | 
| 
 | 
 | 
} catch (OtherExceptionType $e) {
 | 
| 
 | 
 | 
    // catch body
 | 
| 
 | 
 | 
}
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
6. Closures
 | 
| 
 | 
 | 
-----------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Closures MUST be declared with a space after the `function` keyword, and a
 | 
| 
 | 
 | 
space before and after the `use` keyword.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The opening brace MUST go on the same line, and the closing brace MUST go on
 | 
| 
 | 
 | 
the next line following the body.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There MUST NOT be a space after the opening parenthesis of the argument list
 | 
| 
 | 
 | 
or variable list, and there MUST NOT be a space before the closing parenthesis
 | 
| 
 | 
 | 
of the argument list or variable list.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
In the argument list and variable list, there MUST NOT be a space before each
 | 
| 
 | 
 | 
comma, and there MUST be one space after each comma.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Closure arguments with default values MUST go at the end of the argument
 | 
| 
 | 
 | 
list.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
A closure declaration looks like the following. Note the placement of
 | 
| 
 | 
 | 
parentheses, commas, spaces, and braces:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
$closureWithArgs = function ($arg1, $arg2) {
 | 
| 
 | 
 | 
    // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
 | 
| 
 | 
 | 
    // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Argument lists and variable lists MAY be split across multiple lines, where
 | 
| 
 | 
 | 
each subsequent line is indented once. When doing so, the first item in the
 | 
| 
 | 
 | 
list MUST be on the next line, and there MUST be only one argument or variable
 | 
| 
 | 
 | 
per line.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
When the ending list (whether or arguments or variables) is split across
 | 
| 
 | 
 | 
multiple lines, the closing parenthesis and opening brace MUST be placed
 | 
| 
 | 
 | 
together on their own line with one space between them.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
The following are examples of closures with and without argument lists and
 | 
| 
 | 
 | 
variable lists split across multiple lines.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
$longArgs_noVars = function (
 | 
| 
 | 
 | 
    $longArgument,
 | 
| 
 | 
 | 
    $longerArgument,
 | 
| 
 | 
 | 
    $muchLongerArgument
 | 
| 
 | 
 | 
) {
 | 
| 
 | 
 | 
   // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
$noArgs_longVars = function () use (
 | 
| 
 | 
 | 
    $longVar1,
 | 
| 
 | 
 | 
    $longerVar2,
 | 
| 
 | 
 | 
    $muchLongerVar3
 | 
| 
 | 
 | 
) {
 | 
| 
 | 
 | 
   // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
$longArgs_longVars = function (
 | 
| 
 | 
 | 
    $longArgument,
 | 
| 
 | 
 | 
    $longerArgument,
 | 
| 
 | 
 | 
    $muchLongerArgument
 | 
| 
 | 
 | 
) use (
 | 
| 
 | 
 | 
    $longVar1,
 | 
| 
 | 
 | 
    $longerVar2,
 | 
| 
 | 
 | 
    $muchLongerVar3
 | 
| 
 | 
 | 
) {
 | 
| 
 | 
 | 
   // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
$longArgs_shortVars = function (
 | 
| 
 | 
 | 
    $longArgument,
 | 
| 
 | 
 | 
    $longerArgument,
 | 
| 
 | 
 | 
    $muchLongerArgument
 | 
| 
 | 
 | 
) use ($var1) {
 | 
| 
 | 
 | 
   // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
$shortArgs_longVars = function ($arg) use (
 | 
| 
 | 
 | 
    $longVar1,
 | 
| 
 | 
 | 
    $longerVar2,
 | 
| 
 | 
 | 
    $muchLongerVar3
 | 
| 
 | 
 | 
) {
 | 
| 
 | 
 | 
   // body
 | 
| 
 | 
 | 
};
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Note that the formatting rules also apply when the closure is used directly
 | 
| 
 | 
 | 
in a function or method call as an argument.
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
```php
 | 
| 
 | 
 | 
<?php
 | 
| 
 | 
 | 
$foo->bar(
 | 
| 
 | 
 | 
    $arg1,
 | 
| 
 | 
 | 
    function ($arg2) use ($var1) {
 | 
| 
 | 
 | 
        // body
 | 
| 
 | 
 | 
    },
 | 
| 
 | 
 | 
    $arg3
 | 
| 
 | 
 | 
);
 | 
| 
 | 
 | 
```
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
7. Conclusion
 | 
| 
 | 
 | 
--------------
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
There are many elements of style and practice intentionally omitted by this
 | 
| 
 | 
 | 
guide. These include but are not limited to:
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Declaration of global variables and global constants
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Declaration of functions
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Operators and assignment
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Inter-line alignment
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Comments and documentation blocks
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Class name prefixes and suffixes
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- Best practices
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
Future recommendations MAY revise and extend this guide to address those or
 | 
| 
 | 
 | 
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
 | 
| 
 | 
 | 
 | 
| 
 | 
 | 
- [PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md)
 | 
| 
 | 
 | 
- [PSR-1](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
 | 
| 
 | 
 | 
- [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
 | 
| 
 | 
 | 
- [Symfony Coding Standards](http://symfony.com/doc/master/contributing/code/standards.html) | 
 | 
 | 
\ No newline at end of file |