mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Improve documentation for contributors
This commit is contained in:
parent
0d6358f2cf
commit
5d37cd97e4
2 changed files with 23 additions and 42 deletions
|
@ -1,10 +1,9 @@
|
||||||
# PHP coding standards
|
# PHP coding standards
|
||||||
|
|
||||||
This file lists several standards that any programmer adding or changing code in
|
This file lists standards that any programmer adding or changing code in
|
||||||
PHP should follow. Since this file was added at a very late stage of the
|
PHP should follow. The code base does not yet fully follow it, but new
|
||||||
development of PHP v3.0, the code base does not fully follow it, but new
|
features are going in that general direction. Many sections have been
|
||||||
features are going in that general direction. Many sections have been rewritten to
|
rewritten to comply with these rules.
|
||||||
use these rules.
|
|
||||||
|
|
||||||
## Code implementation
|
## Code implementation
|
||||||
|
|
||||||
|
@ -12,8 +11,8 @@ use these rules.
|
||||||
|
|
||||||
2. Functions that are given pointers to resources should not free them.
|
2. Functions that are given pointers to resources should not free them.
|
||||||
|
|
||||||
For instance, `function int mail(char *to, char *from)` should NOT free to
|
For instance, `function int mail(char *to, char *from)` should NOT free `to`
|
||||||
and/or from.
|
and/or `from`.
|
||||||
|
|
||||||
Exceptions:
|
Exceptions:
|
||||||
|
|
||||||
|
@ -21,21 +20,20 @@ use these rules.
|
||||||
`efree()`
|
`efree()`
|
||||||
|
|
||||||
* The function is given a boolean argument, that controls whether or not the
|
* The function is given a boolean argument, that controls whether or not the
|
||||||
function may free its arguments (if true - the function must free its
|
function may free its arguments (if true, the function must free its
|
||||||
arguments, if false - it must not)
|
arguments; if false, it must not)
|
||||||
|
|
||||||
* Low-level parser routines, that are tightly integrated with the token
|
* Low-level parser routines, that are tightly integrated with the token
|
||||||
cache and the bison code for minimum memory copying overhead.
|
cache and the bison code for minimum memory copying overhead.
|
||||||
|
|
||||||
3. Functions that are tightly integrated with other functions within the same
|
3. Functions that are tightly integrated with other functions within the same
|
||||||
module, and rely on each other non-trivial behavior, should be documented as
|
module, and rely on each other's non-trivial behavior, should be documented as
|
||||||
such and declared `static`. They should be avoided if possible.
|
such and declared `static`. They should be avoided if possible.
|
||||||
|
|
||||||
4. Use definitions and macros whenever possible, so that constants have
|
4. Use definitions and macros whenever possible, so that constants have
|
||||||
meaningful names and can be easily manipulated. The only exceptions to this
|
meaningful names and can be easily manipulated. Any use of a numeric
|
||||||
rule are 0 and 1, when used as `false` and `true` (respectively). Any other
|
constant to specify different behavior or actions should be done through
|
||||||
use of a numeric constant to specify different behavior or actions should be
|
a `#define`.
|
||||||
done through a `#define`.
|
|
||||||
|
|
||||||
5. When writing functions that deal with strings, be sure to remember that PHP
|
5. When writing functions that deal with strings, be sure to remember that PHP
|
||||||
holds the length property of each string, and that it shouldn't be
|
holds the length property of each string, and that it shouldn't be
|
||||||
|
@ -260,35 +258,18 @@ use these rules.
|
||||||
```
|
```
|
||||||
|
|
||||||
4. When indenting, use the tab character. A tab is expected to represent four
|
4. When indenting, use the tab character. A tab is expected to represent four
|
||||||
spaces. It is important to maintain consistency in indenture so that
|
spaces. It is important to maintain consistency in indentation so that
|
||||||
definitions, comments, and control structures line up correctly.
|
definitions, comments, and control structures line up correctly.
|
||||||
|
|
||||||
5. Preprocessor statements (`#if` and such) MUST start at column one. To indent
|
5. Preprocessor statements (`#if` and such) MUST start at column one. To indent
|
||||||
preprocessor directives you should put the `#` at the beginning of a line,
|
preprocessor directives you should put the `#` at the beginning of a line,
|
||||||
followed by any number of whitespace.
|
followed by any number of spaces.
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
1. Extensions should be well tested using `*.phpt` tests. Read about that at
|
1. Extensions should be well tested using `*.phpt` tests. Read more at
|
||||||
[qa.php.net](https://qa.php.net/write-test.php) documentation.
|
[qa.php.net](https://qa.php.net/write-test.php) documentation.
|
||||||
|
|
||||||
## Folding hooks
|
|
||||||
|
|
||||||
Use `{{{` symbols for the folding mode in Emacs and vim (`set fdm=marker`).
|
|
||||||
Folding is very useful when dealing with large files because you can scroll
|
|
||||||
through the file quickly and just unfold the function you wish to work on.
|
|
||||||
The `}}}` at the end of each function marks the end of the fold, and should
|
|
||||||
be on a separate line.
|
|
||||||
|
|
||||||
```c
|
|
||||||
/* {{{ Returns the absolute value of the number */
|
|
||||||
PHP_FUNCTION(abs)
|
|
||||||
{
|
|
||||||
...
|
|
||||||
}
|
|
||||||
/* }}} */
|
|
||||||
```
|
|
||||||
|
|
||||||
## New and experimental functions
|
## New and experimental functions
|
||||||
|
|
||||||
To reduce the problems normally associated with the first public implementation
|
To reduce the problems normally associated with the first public implementation
|
||||||
|
@ -302,8 +283,8 @@ The file labelled `EXPERIMENTAL` should include the following information:
|
||||||
* Any authoring information (known bugs, future directions of the module).
|
* Any authoring information (known bugs, future directions of the module).
|
||||||
* Ongoing status notes which may not be appropriate for Git comments.
|
* Ongoing status notes which may not be appropriate for Git comments.
|
||||||
|
|
||||||
In general new features should go to PECL or experimental branches until there
|
In general, new features should go to PECL or experimental branches until there
|
||||||
are specific reasons for directly adding it to the core distribution.
|
are specific reasons for directly adding them to the core distribution.
|
||||||
|
|
||||||
## Aliases & legacy documentation
|
## Aliases & legacy documentation
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Anybody who programs in PHP can be a contributing member of the community that
|
Anybody who programs in PHP can be a contributing member of the community that
|
||||||
develops and deploys it; the task of deploying PHP, documentation and associated
|
develops and deploys it; the task of deploying PHP, documentation and associated
|
||||||
websites is a never ending one. With every release, or release candidate comes a
|
websites is a never-ending one. With every release or release candidate comes a
|
||||||
wave of work, which takes a lot of organization and co-ordination.
|
wave of work, which takes a lot of organization and co-ordination.
|
||||||
|
|
||||||
You don't need any special access to download, build, debug and begin submitting
|
You don't need any special access to download, build, debug and begin submitting
|
||||||
|
@ -85,7 +85,7 @@ for additional notes on the best way to approach submitting an RFC.
|
||||||
|
|
||||||
## Writing tests
|
## Writing tests
|
||||||
|
|
||||||
We love getting new tests! PHP is a huge project and improving code coverage is
|
We love getting new tests! PHP is a huge project and improving test coverage is
|
||||||
a huge win for every PHP user.
|
a huge win for every PHP user.
|
||||||
|
|
||||||
[Our QA site includes a page detailing how to write test cases.](https://qa.php.net/write-test.php)
|
[Our QA site includes a page detailing how to write test cases.](https://qa.php.net/write-test.php)
|
||||||
|
@ -255,14 +255,14 @@ included.
|
||||||
|
|
||||||
- Read [Coding standards](/CODING_STANDARDS.md) before you start working.
|
- Read [Coding standards](/CODING_STANDARDS.md) before you start working.
|
||||||
- Update git source just before running your final `diff` and before testing.
|
- Update git source just before running your final `diff` and before testing.
|
||||||
- Add in-line comments and/or have external documentation ready. Use only
|
- Add inline comments and/or have external documentation ready. Use only
|
||||||
`/* */` style comments, not `//`.
|
`/* */` style comments, not `//`.
|
||||||
- Create test scripts for use with `make test`.
|
- Create test scripts for use with `make test`.
|
||||||
- Run `make test` to check your change doesn't break other features.
|
- Run `make test` to check your change doesn't break other features.
|
||||||
- Rebuild PHP with `--enable-debug` which will show some kinds of memory errors
|
- Rebuild PHP with `--enable-debug` which will show some kinds of memory errors
|
||||||
and check the PHP and web server error logs after running your PHP tests.
|
and check the PHP and web server error logs after running your PHP tests.
|
||||||
- Rebuild PHP with `--enable-zts` to check your change compiles and operates
|
- Rebuild PHP with `--enable-zts` to check your change compiles and operates
|
||||||
correctly in a thread safe PHP.
|
correctly in a thread-safe PHP.
|
||||||
- Review the change once more just before submitting it.
|
- Review the change once more just before submitting it.
|
||||||
|
|
||||||
## What happens after submitting contribution?
|
## What happens after submitting contribution?
|
||||||
|
@ -270,7 +270,7 @@ included.
|
||||||
If your change is easy to review and obviously has no side-effects, it might be
|
If your change is easy to review and obviously has no side-effects, it might be
|
||||||
committed relatively quickly.
|
committed relatively quickly.
|
||||||
|
|
||||||
Because PHP is a volunteer-driven effort more complex changes will require
|
Because PHP is a volunteer-driven effort, more complex changes will require
|
||||||
patience on your side. If you do not receive feedback in a few days, consider
|
patience on your side. If you do not receive feedback in a few days, consider
|
||||||
bumping. Before doing this think about these questions:
|
bumping. Before doing this think about these questions:
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ bumping. Before doing this think about these questions:
|
||||||
- Did I review the mailing list archives to see if these kind of changes had
|
- Did I review the mailing list archives to see if these kind of changes had
|
||||||
been discussed before?
|
been discussed before?
|
||||||
- Did I explain my change clearly?
|
- Did I explain my change clearly?
|
||||||
- Is my change too hard to review? Because of what factors?
|
- Is my change too hard to review? If so, why?
|
||||||
|
|
||||||
## What happens when your contribution is applied?
|
## What happens when your contribution is applied?
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue