Coding standards help ensure that the code is high quality, has Iewer bugs, and can be easily maintained. Topics covered in the ZF coding standards include: PHP File Formatting Naming Conventions Coding Style Inline Documentation. A class name is comprised oI more than one word, the Iirst letter oI each new word must be capitalized.
Coding standards help ensure that the code is high quality, has Iewer bugs, and can be easily maintained. Topics covered in the ZF coding standards include: PHP File Formatting Naming Conventions Coding Style Inline Documentation. A class name is comprised oI more than one word, the Iirst letter oI each new word must be capitalized.
This document provides guidelines Ior code Iormatting and documentation. Coding standards are important in any development project, but they are particularly important when many developers are working on the same project. Coding standards help ensure that the code is high quality, has Iewer bugs, and can be easily maintained.
Topics covered in the ZF coding standards include:
For Iiles that contain only PHP code, the closing tag ("?~") is never permitted. It is not required by PHP, and omitting it prevents the accidental injection oI trailing whitespace into the response. Indentation should consist oI 4 spaces. Tabs are not allowed. Keep each line oI the code under 80 characters. Lines must end with a single lineIeed (LF) character. Do not use carriage returns (CR) or the carriage return/lineIeed combination (CRLF)
2. Naming Conventions
2.1Classes
Zend Framework standardizes on a class naming convention whereby the names oI the classes directly map to the directories in which they are stored.
e.g The class 'ZendDbTable` should be stored in 'Zend/Db/Table` where 'Zend/` is the root level directory oI the ZF standard library. All Zend Framework classes are stored hierarchically under these root directories.
Class names may only contain alphanumeric characters. Numbers are permitted in class names but are discouraged in most cases. Underscores are only permitted in place oI the path separator.
e.g. The Iilename "Zend/Db/Table.php" must map to the class name "ZendDbTable".
2 | a g e
II a class name is comprised oI more than one word, the Iirst letter oI each new word must be capitalized. Successive capitalized letters are not allowed. e.g. a class "ZendPDF" is not allowed while "ZendPdf" is acceptable.
2.2Filenames Use only alphanumeric characters, but underscores and dash character ("-") are permitted also. Spaces are strictly prohibited. Any Iile that contains PHP code should end with the extension ".php", with the notable exception oI view scripts. e.g. Zend/Db.php Zend/Controller/Front.php Zend/Jiew/Helper/FormRadio.php
File names must map to class names as described above.
2.3Functions and Methods Function names may only contain alphanumeric characters. Underscores are not permitted. Numbers are permitted in Iunction names but are discouraged in most cases.
Function names must always start with a lowercase letter. When a Iunction name consists oI more than one word, the Iirst letter oI each new word must be capitalized. This is commonly called "camelCase" Iormatting.
Function names should be as verbose as is practical to Iully describe their purpose and behavior. e.g. filterInput() getElementBvId()
For object-oriented programming, accessors Ior instance or static variables should always be preIixed with "get" or "set".
For methods on objects that are declared with the "private" or "protected" modiIier, the Iirst character oI the variable name must be an underscore. This is the only acceptable application oI an underscore in a method name.
Methods declared "public" should never contain an underscore. Functions in the global scope (a.k.a "Iloating Iunctions") are permitted but discouraged in most cases. Consider wrapping these Iunctions in a static class.
2.4 Variables Variables naming convention is exactly same as the Iunction names. As with Iunction names variable names must always start with a lowercase letter and Iollow the "camelCaps" capitalization convention. 3 | a g e
Terse variable names such as "$i" and "$n" are discouraged Ior all but the smallest loop contexts. II a loop contains more than 20 lines oI code, the index variables should have more descriptive names.
2.5 Constants Constants may contain both alphanumeric characters and underscores. Numbers are permitted in constant names. All letters used in a constant name must be capitalized. Words in constant names must be separated by underscore characters. e.g. EMBEDSUPPRESSEMBEDEXCEPTION is permitted but EMBEDSUPPRESSEMBEDEXCEPTION is not. Constants must be deIined as class members with the "const" modiIier. DeIining constants in the global scope with the "deIine" Iunction is permitted but strongly discouraged.
3. Coding Style
3.1 PHP Code Demarcation PHP code must always be delimited by the Iull-Iorm, standard PHP tags: ?php ?~ For Iiles containing only PHP code, the closing tag must always be omitted
3.2 Strings - String Literals When a string is literal (contains no variable substitutions), the apostrophe or "single quote" should always be used to demarcate the string: e.g. $a Example String,
When a literal string itselI contains apostrophes, it is permitted to demarcate the string with quotation marks or "double quotes". This is especially useIul Ior SQL statements:
e.g. $sql "SELECT `id`, `name` from `people` WHERE `name`Fred OR `name`Susan",
This syntax is preIerred over escaping apostrophes as it is much easier to read.
- String Concatenation Strings must be concatenated using the "." operator. A space must always be added beIore and aIter the"." operator to improve readability: e.g. $companv Zend . . Technologies,
4 | a g e
When concatenating strings with the "." operator, it is encouraged to break the statement into multiple lines to improve readability. In these cases, each successive line should be padded with whitespace such that the "." operator is aligned under the "" operator:
e.g. $sql "SELECT `id`, `name` FROM `people` " . "WHERE `name` Susan " . "ORDER BY `name` ASC ",
3.3 Arrays -Numerically Indexed Arrays Negative numbers are not permitted as indices. All base indices besides 0 are discouraged. When declaring indexed arrays with the array Iunction, a trailing space must be added aIter each comma delimiter to improve readability. e.g. $sampleArrav arrav(1, 2, 3, Zend, Studio), It is permitted to declare multiline indexed arrays using the "array" construct. In this case, each successive line must be padded with spaces such that beginning oI each line is aligned: e.g. $sampleArrav arrav(1, 2, 3, Zend, Studio, $a, $b, $c, 56.44, $d, 500),
3.4 Class Declaration Classes must be named according to Zend Framework's naming conventions. The brace should always be written on the line underneath the class name (the "one true brace" Iorm). Every class must have a documentation block that conIorms to the PHPDocumentor standard. All code in a class must be indented with four spaces. Only one class is permitted in each PHP Iile. Placing additional code in class Iiles is permitted but discouraged. In such Iiles, two blank lines must separate the class Irom any additional PHP code in the class Iile. e.g. /** * Documentation Block Here */ class SampleClass
// all contents oI class // must be indented Iour spaces } Function and Method Declaration /** * Documentation Block Here */ 3 | a g e
class Foo
/** * Documentation Block Here */ public Iunction bar()
// all contents oI Iunction // must be indented Iour spaces } }
Pass-by-reIerence is the only parameter passing mechanism permitted in a method declaration.
Call-time pass-by-reIerence is strictly prohibited. The return value must not be enclosed in parentheses. This can hinder readability, in additional to breaking code iI a method is later changed to return by reIerence. e.g. public Iunction bar()
return $this-~bar; }
3.5 Control Statements -If/Else/Elseif Control statements based on the iI and elseiI constructs must have a single space beIore the opening parenthesis oI the conditional and a single space aIter the closing parenthesis. Within the conditional statements between the parentheses, operators must be separated by spaces Ior readability. Inner parentheses are encouraged to improve logical grouping Ior larger conditional expressions. The opening brace is written on the same line as the conditional statement. The closing brace is always written on its own line. Any content within the braces must be indented using Iour spaces.
e.g. iI ($a ! 2) $a 2; } iI ($a ! 2) $a 2; } elseiI ($a 3) $a 4; } else 6 | a g e
$a 7; }
Use oI the "elseiI" construct is permitted but strongly discouraged in Iavor oI the "else iI" combination.
-Switch All content within the "switch" statement must be indented using Iour spaces. Content under each "case" statement must be indented using an additional Iour spaces. e.g. switch ($numPeople) case 1: break; case 2: break; deIault: break; }
The construct deIault should never be omitted Irom a switch statement.
4. Inline Documentation
4.1Documentation Format All documentation blocks ("docblocks") must be compatible with the phpDocumentor Iormat.(visit. http.//phpdoc.org/) All class Iiles must contain a "file-level" docblock at the top oI each Iile and a "class- level" docblock immediately above each class.
-File Every Iile that contains PHP code must have a docblock at the top oI the Iile that contains these phpDocumentor tags at a minimum:
/** * Short description for file * * Long description for file (if anv)... * * LICENSE. Some license information * * copvright 2008 Zend Technologies * license http.//framework.:end.com/license BSD License * version $Id.$ * link http.//framework.:end.com/package/PackageName 7 | a g e
* since File available since Release 1.5.0 */
-Classes Every class must have a docblock that contains these phpDocumentor tags at a minimum:
/** * Short description Ior class * * Long description Ior class (iI any)... * * copyright 2008 Zend Technologies * license http://Iramework.zend.com/license BSD License * version Release: packageversion * link http://Iramework.zend.com/package/PackageName * since Class available since Release 1.5.0 * deprecated Class deprecated in Release 2.0.0 */
- Functions Every Iunction, including object methods, must have a docblock that contains at a minimum: - A description oI the Iunction - All oI the arguments - All oI the possible return values
II a Iunction/method may throw an exception, use throws Ior all known exception classes: throws exceptionclass [description]