User Tools

Site Tools


en:dev:all:psr:psr-1

originating from PHP-FIG PSR-1

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.

Overview

  • Files MUST use only <?php (:!: adaption for WB: and <?=) tags.
  • Files MUST use only UTF-8 without BOM for PHP code.
  • Files SHOULD either declare symbols (classes, functions, constants, etc.) OR contain directly executabl code (cause side-effects), but SHOULD NOT do both.
  • Namespaces and classes MUST follow an “autoloading” PSR: PSR-0.
  • 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.

Files

PHP Tags

PHP code MUST use the long <?php ?> tags (:!: adaption for WB: or the short-echo <?= ?> tags); it MUST NOT use the other tag variations.

Character Encoding

PHP code MUST use only UTF-8 without BOM.

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 or a database, and so on.
:!: Adaption for WB: Files with 'side effects' MUST be secured in a special manner so that they can not be called e.g. by DeepLinks and could cause any damage this way.

The following is an example of a file with both declarations and 'side effects'; i.e, an example of what to avoid:

// side effect:change ini settings
ini_set('errot_reporting', E_ALL);
 
// side effect: lädt loads a file
include('file.php');
 
// side effect: generates output
echo '<html>'.PHP_EOL;
 
// 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:

// declaration
function foo()
{
    // function body
}
 
// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

Namespaces 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.

:!: Adaption for WB: Interfaces and abstract classes must be marked by the suffix Interface or Abstract which has to be appended to the class name.

Code written for PHP 5.3 and after MUST use formal namespaces.

For example:

<?php
// PHP 5.3 and later:
namespace Vendor\Model;
 
class Foo
{
}
<?php
// PHP 5.3 and later:
namespace Vendor\Model;
 
class FooInterface
{
}

Code written for 5.2.x and before SHOULD use the pseudo-namespacing convention of Vendor_ prefixes on class names.

<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}
<?php
// PHP 5.2.x and earlier:
class Vendor_Model_FooAbstract
{
}

Class Constants, Properties, and Methods

The term 'class' refers to all classes, interfaces, and traits.

Constants

Class constants MUST be declared in all upper case with underscore separators. For example:

<?php
namespace Vendor\Model;
 
class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

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.

:!: Adaption to WB: It is REQUIRED that the StudlyCaps format has to be used everywhere consistently, where a lower case letter has to be prepended to each identifier, which indicates the data type of the property. Currently the following assignments are defined:

's' ⇒ string, 'i' ⇒ integer, 'f' ⇒ floating point number, 'b' ⇒ boolean, 'a' ⇒ array, 'o' ⇒ object
$sItemName = 'Something';
$iUserId   = 2;
$fPrice    = 45.25;

Methods

Method names MUST be declared in camelCase().

Manuela v.d.Decken 12.08.2014 20:35

en/dev/all/psr/psr-1.txt · Last modified: 03.06.2015 15:55 (external edit)