@@ -21,12 +21,12 @@ If you wish to implement a feature, you should start a discussion on the [Questi
From 1.7 onwards a new coding style is being implemented that is more in line with other projects. The core codebase is gradually being refactored, and any new code should use the guidelines below. When making changes it's encouraged to update the style of the surrounding code, e.g. the rest of the function being modified.
**Please keep style-only changes to a separate commit!** For example if you fix a bug, do that first in one commit, then optionally reformat the rest of the function's code and perform a second commit.
However, **please keep style-only changes to a separate commit!** For example if you fix a bug, do that first in one commit, then optionally reformat the rest of the function's code and perform a second commit.
### Rules
### Guidelines
- PHP code should start with `<?php` (almost always the very first line). The closing tag `?>` should be omitted to avoid accidental output.
- PHP files must use only UTF-8 encoding without BOM.
- PHP files should use UTF-8 encoding without BOM (this is usually default in most text editors).
- Trailing whitespace (tabs or spaces at the end of lines) should be trimmed on save. Any advanced text editor should be able to do this. (For Sublime Text you can add the option `"trim_trailing_white_space_on_save": true` to your preferences. In Notepad++ you can press Alt+Shift+S.)
- Use tabs for indenting. Each file should start at level 0 (i.e. no indentation).
- Functions should use a DocBlock-style comment.
...
...
@@ -38,27 +38,28 @@ From 1.7 onwards a new coding style is being implemented that is more in line wi
### Examples
Here is an old example. Even though the braces are optional (the foreach contains only one statement), the statement spans several lines so brances should be used here for clarity.
Here is an example of the old style. Even though the braces are technically optional (the foreach contains only one statement), the statement spans several lines so brances should be used here for clarity.
foreach ($checkarrays as $checkarray)
if ( isset(${$checkarray}) && is_array(${$checkarray}) )
foreach (${$checkarray} as $checkkey => $checkvalue)
if (isset($keyprotect[$checkkey]))
qa_fatal_error('My superglobals are not for overriding');
else
unset($GLOBALS[$checkkey]);
foreach ($thingarray as $thing)
if (isset($thing['id']))
if (strpos($thing['id'], 'Hello')===0)
$newthing='Goodbye';
elseif ($thing['id']=='World')
$newerthing='Galaxy';
else
return null;
It should be rewritten as:
foreach ($checkarrays as $checkarray) {
if (isset(${$checkarray}) && is_array(${$checkarray})) {
foreach (${$checkarray} as $checkkey => $checkvalue) {
if (isset($keyprotect[$checkkey]))
qa_fatal_error('My superglobals are not for overriding');
else
unset($GLOBALS[$checkkey]);
}
foreach ($thingarray as $thing) {
if (isset($thing['id'])) {
if (strpos($thing['id'], 'Hello') === 0)
$newthing = 'Goodbye';
elseif ($thing['id'] == 'World')
$newerthing = 'Galaxy';
}
else
return null;
}
Here is a class example showing the placement of braces, operators, and an advanced DocBlock comment.
...
...
@@ -80,8 +81,19 @@ Here is a class example showing the placement of braces, operators, and an advan
}
}
### New autoloaded classes
From version 1.7 some classes are autoloaded, so it's possible to use them without adding a `require_once` first. These loosely follow [PSR-0][PSR0] using faux namespaces. This is being done slowly and carefully to maintain backwards compatibility, and does not apply to plugins, themes, nor most of the core for that matter.
Classes are stored in the `qa-include/Q2A` folder, and then in subfolders depending on their categorization.
Class names should be of the form `Q2A_<Namespace>_<Class>`, e.g. `Q2A_Util_Debug`. There may be multiple "namespaces", e.g. `Q2A_Db_User_Messages`.
Classes are mapped to PHP files with the underscores converted to directory separators. The `Q2A_Util_Debug` class is in the file `qa-include/Q2A/Util/Debug.php`. A class named `Q2A_Db_User_Messages` would be in a file `qa-include/Q2A/Db/User/Messages.php`.