File: CODING_STANDARDS

package info (click to toggle)
php3 1%3A3.0-2
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 6,512 kB
  • ctags: 6,320
  • sloc: ansic: 58,611; sh: 2,279; yacc: 1,090; php: 1,031; makefile: 911; cpp: 529; perl: 411; awk: 90; sql: 11
file content (81 lines) | stat: -rw-r--r-- 3,705 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
PHP Coding Standards
====================


This file lists several standards that any programmer, adding or changing
code in PHP, should follow.  Since this file was added at a very late
stage of the development of PHP v3.0, the code base does not (yet) fully
follow it, but it's going in that general direction.
This is an initial version - it'll most probably grow as time passes.


Code Implementation
-------------------

[1] Functions that are given pointers to resources should not free them

For instance, function int mail(char *to, char *from) should NOT free
to and/or from.
Exceptions:

  - The function's designated behavior is freeing that resource.  E.g. efree()
  - 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
    arguments, if false - it must not)
  - Low-level parser routines, that are tightly integrated with the token
    cache and the bison code for minimum memory copying overhead.
    
[2] Functions that are tightly integrated with other functions within the
    same module, and rely on each other non-trivial behavior, should be
    documented as such and declared 'static'.  They should be avoided if
    possible.

[3] Use definitions and macros whenever possible, so that constants have
    meaningful names and can be easily manipulated.  The only exceptions
    to this rule are 0 and 1, when used as false and true (respectively).
    Any other use of a numeric constant to specify different behavior
    or actions should be done through a #define.

[4] 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 calculated with strlen().  Write your functions in a such
    a way so that they'll take advantage of the length property, both
    for efficiency and in order for them to be binary-safe.
    Functions that change strings and obtain their new lengths while
    doing so, should return that new length, so it doesn't have to be
    recalculated with strlen() (e.g. _php3_addslashes())

[5] Use php3_error() to report any errors/warnings during code execution.
    Use descriptive error messages, and try to avoid using identical
    error strings for different stages of an error.  For example,
    if in order to obtain a URL you have to parse the URL, connect,
    and retreive the text, assuming something can go wrong at each
    of these stages, don't report an error "Unable to get URL"
    on all of them, but instead, write something like "Unable
    to parse URL", "Unable to connect to URL server" and "Unable
    to fetch URL text", respectively.

[6] NEVER USE strncat().  If you're absolutely sure you know what you're doing,
    check its man page again, and only then, consider using it, and even then,
    try avoiding it.


Naming Conventions
------------------

[1] Function names for user functions implementation should be prefixed with
    "php3_", and followed by a word or an underscore-delimited list of words,
    in lowercase letters, that describes the function.

[2] Function names used by user functions implementations should be prefixed
    with "_php3_", and followed by a word or an underscore-delimited list of
    words, in lowercase letters, that describes the function.  If applicable,
    they should be declared 'static'.
    
[3] Variable names must be meaningful.  One letter variable names must be
    avoided, except for places where the variable has no real meaning or
    a trivial meaning (e.g. for (i=0; i<100; i++) ...).

[4] Variable names should be in lowercase;  Use underscores to seperate
    between words.