2012040909550961

I. Prefacio de las normas

La estandarización no es un estilo personal especial; permite a los programadores entender cualquier código y aclarar el estado del programa; los nuevos pueden adaptarse rápidamente al entorno; evita que las personas nuevas en PHP cometan los mismos errores una y otra vez; en un entorno de desarrollo consistente, se pueden reducir las oportunidades de que la gente cometa errores. Los estándares de esta norma, en la gran mayoría de sus aplicaciones, imitan el sistema técnico de Java, porque el sistema técnico de Java, con sus numerosos casos de éxito, se ha convertido en el estándar industrial de la mayoría de las capas de aplicación informática; además, facilita la futura transición de la empresa al sistema técnico de Java.

II. Definición de nomenclatura

Nombres de variables locales

Usar sustantivos y verbos en inglés, usar letras mayúsculas como separación entre palabras, el resto de letras en minúscula, la primera letra de cada palabra en minúscula, sin guiones bajos. Ejemplo:

$repeatCount = '';
$delUserSql  = '';

Nombres de constantes globales

Usar sustantivos y verbos en inglés, todos en mayúsculas, separar cada palabra con guiones bajos. Ejemplo:

define( 'WEBSITE_NAME', '名称' );
define( 'WEBSITE_URL',  '地址' )

Nombres de variables de array

Usar sustantivos y verbos en inglés, usar letras mayúsculas como separación entre palabras, el resto en minúscula, la primera letra de cada palabra en minúscula, sin guiones bajos, con el sufijo de cadena 'Array'. Ejemplo:

$scopeArray  = array();
$bookIdArray = array();

Nombres de variables estáticas

Usar sustantivos y verbos en inglés, usar letras mayúsculas como separación entre palabras, el resto en minúscula, la primera letra de cada palabra en minúscula, sin guiones bajos, con el sufijo de cadena 'Static'. Ejemplo:

function getDirectoryFile()
{
    static $fileArrayStatic = '';
    static $fileNumStatic   = '';
    ...
}

Nombres de variables de objeto

Usar el nombre de la clase como prefijo de la variable, todas las letras en mayúsculas, con el sufijo de cadena '_OBJECT'. Ejemplo:

$USERACCOUNT_OBJECT   = new UserAccount();
$PAINTINGORDER_OBJECT = new PaintingOrder();

Nombres de clases

Usar sustantivos en inglés, usar letras mayúsculas como separación entre palabras, el resto en minúscula, la primera letra del sustantivo en mayúscula, sin guiones bajos. Ejemplo:

class UserAccount
{
    ...
}
class PaintingOrder
{
    ...
}

Nombres de métodos

Usar sustantivos y verbos en inglés, usar letras mayúsculas como separación entre palabras, el resto en minúscula, la primera letra de cada palabra en minúscula, sin guiones bajos. Ejemplo:

class UserAccount
{
    function isAccountOk()
    {
        ...
    }
    function addAccount()
    {
        ...
    }
}

Nombres de parámetros de los métodos

Usar sustantivos y verbos en inglés, usar letras mayúsculas como separación entre palabras, el resto en minúscula, la primera letra de cada palabra en minúscula, sin guiones bajos. Ejemplo:

class UserAccount
{
    function isAccountOk( $accountName )
    {
        $this->accountName = $accountName;
        ...
    }
    function addAccount( $inputDataArray )
    {
        $this->inputArray = $inputDataArray;
        ...
    }
    var $accuntName = '';
    var $inputArray = '';
}

Nombres de atributos de clase

Usar sustantivos y verbos en inglés, usar letras mayúsculas como separación entre palabras, el resto en minúscula, la primera letra de cada palabra.

usar mayúsculas, sin guiones bajos; si un atributo de clase es una variable de objeto, se le añade el sufijo de cadena 'Object'. Ejemplo:

class UserAccount
{
    function IsAccountOk()
    {
        ...
    }
    function AddAccount()
    {
        ...
    }
    var $tableName      = '';
    var $databaseObject = '';
}

III. Redacción de sintaxis

Regla de las llaves {}

Colocar las llaves en la misma columna debajo de la palabra clave. Ejemplo:

if ( $condition )
{
    ...
}

No usar esta forma:

if ( $condition ) 
{
    ...
}

Regla de sangría del código

Usar sangría con tabulador (tecla TAB) o cuatro espacios. Si el nivel de anidación es mayor que cuatro, rediseñe el algoritmo de esa lógica de negocio.

Regla de los paréntesis ()

No colocar los paréntesis pegados a las palabras clave, nombres de métodos o parámetros de métodos; deben separarse con un espacio. Ejemplo:

if ( $condition )
{
    ...
}
function addAccount( $inputDataArray )
{
    ...
}

Debido a que los paréntesis pegados a palabras clave, etc., pueden parecer parte de ellas, no use la siguiente forma. Ejemplo:

if ($condition) 
{
    ...
}
function addAccount($inputDataArray)
{
    ...
}

Regla de if .. else ...

Por lo general, es mejor tener un bloque else para manejar casos no tratados o desconocidos; incluso si la sentencia condicional tiene una sola línea, se deben usar llaves {}. Ejemplo:

if ( $condition1 )
{
    ...
}
else if ( $condition2 )
{
    ...
}
else
{
    ...
}

Evite en lo posible la siguiente forma. Ejemplo:

if ( $condition1 )
    ...
else
    ...

Regla de switch

Cada bloque case debe terminar con break, y default siempre debe existir para manejar casos desconocidos. Ejemplo:

switch( $condition )
{
    case $value1:
        ...
        break;
    case $value2:
        ...
        break;
    default:
        ...
        break;
}

Regla de posicionamiento de declaraciones

Los bloques de declaración deben estar alineados, y las variables deben inicializarse en su primer uso. Ejemplo:

var $tableName      = '';
var $databaseObject = '';

No usar la siguiente forma. Ejemplo:

var $tableName;
var $accuntName = '';
var $databaseObject = '';

IV. Otras notas

Todos los métodos de clase deben tener un valor de retorno; además de devolver true o false cuando el resultado sea simple, los demás métodos deben devolver valores distintos.

Para entregarlo al flujo de trabajo y procesarlo posteriormente.

En general, el formulario HTML no debe establecer el atributo name del botón submit.

Los nombres de los elementos del formulario HTML deben ser consistentes con los campos de la base de datos.

Cada línea, una declaración.

No usar el método predeterminado para probar valores distintos de cero; debe probarse explícitamente. Ejemplo:

if ( false != $this->IsAccountOk() )
{
    ...
}
else
{
    ...
}

No usar la siguiente forma. Ejemplo:

if ( $this->IsAccountOk() )
{
    ...
}
else
{
    ...
}

No usar el operador lógico ternario ? :, excepto para la asignación de variables. Ejemplo:

$_GET['act']   = !empty( $_GET['act'] ) ? $_GET['act'] : 'v_login';

Usar siempre <?php ?>; prohibido usar el formato <? ?>.

Para variables de tipo get, post y session, deben definirse y usarse mediante $_GET, $_POST, $_SESSION.

Usar comillas simples '' en lugar de comillas dobles "" siempre que sea posible.

Las variables de array, variables de objeto y conjuntos de resultados deben liberarse inmediatamente con unset(), free_result() después de su uso.

Un archivo PHP solo puede contener la definición de una clase; el nombre del archivo debe ser el nombre de la clase.

En los archivos PHP nunca deben aparecer sentencias HTML; en los archivos HTML se debe evitar en lo posible la aparición de sentencias PHP.

Los archivos HTML deben pasar la validación de HTML4 de W3C (http://validator.w3.org/).

Si nota que solo una pequeña parte de los nombres en su programa puede corresponderse con los elementos que representan, rediseñe el sistema.

Antes de nombrar una clase, primero debe saber qué es. Si con las pistas que proporciona el nombre de la clase aún no puede recordar qué es esa clase, entonces su diseño no es lo suficientemente bueno.

Los nombres compuestos de más de tres palabras pueden causar confusión entre las entidades del sistema; rediseñe la clase.

Por lo general, cada método debe ejecutar una única acción lógica; por lo tanto, sus nombres deben indicar claramente qué hacen: usar checkForErrors() en lugar de errorCheck(), usar dumpDataToFile() en lugar de dataFile().

De este modo, las funciones y los datos se convierten en elementos mejor distinguibles.

V. Comentarios del programa

Comentarios de clase

/*
* Purpose:
* 作为通用接口访问数据库的类
* Class Name:
* Database
* Author:
* unixdotnetphpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 添加db_insert_id()方法
* unixdotnetphpboke@163.com
* See: 参照说明
*/
class Database
{
    ……
}

Comentarios de los métodos de clase

/*
* Purpose:
* 取得上一步数据库insert操作产生的id
* Method Name:
* getInsertId()
* Parameter:
* Return:
* int
* Author:
* unixdotnet phpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet phpboke@163.com
* See: 参照说明
*/
function getInsertId()
{
    ...
}

Comentarios de los atributos de clase

class Database
{
/*
* Purpose:
* 连接数据库所需的用户名
* Attribute Name:
* $databaseUserName
* Type: string
* Author:
* unixdotnet phpboke@163.com
* Modifications:
* 2004-08-18 09:15
* 修改原因
* unixdotnet phpboke@163.com
* See: 参照说明
*/
var $databaseUserName;
    ...
}

VI. Aplicación de bases de datos

El diseño de la base de datos debe cumplir las tres formas normales (excepto cuando se requiera extrema velocidad de uso frecuente, en cuyo caso se puede considerar el uso de tablas de registro separadas).

El nombre de la base de datos debe estar compuesto por sustantivos en inglés en minúsculas que resuman el contenido del proyecto.

Los nombres de las tablas de datos deben estar compuestos por sustantivos en inglés en minúsculas que correspondan a los nombres de los objetos (en lo posible, corresponder a los nombres de las clases de negocio del sistema).

Separar las palabras con guiones bajos para evitar posibles errores de mayúsculas/minúsculas al cruzar plataformas.

Los campos de las tablas de datos deben evitar tipos de longitud variable como varchar, text; los campos de información de tiempo deben almacenarse con el tipo unix timestamp.

Al consultar datos, se prohíbe usar el comodín * para evitar ocupar recursos y acelerar el procesamiento; se debe evitar en lo posible el uso de tablas temporales.

Al consultar datos con uniones de múltiples tablas, cada recurso debe usar el nombre completo, es decir, tableName.fieldName, en lugar de fieldName.

Las sentencias SQL deben cumplir en lo posible el estándar ANSI92, evitando las extensiones propias de bases de datos específicas al lenguaje SQL.

Al finalizar el desarrollo, se deben añadir índices a la parte de condiciones (where) de las sentencias SQL; para las que coinciden con múltiples condiciones se debe usar un índice compuesto.

La composición del índice debe coincidir con el orden de las condiciones de izquierda a derecha.

Está estrictamente prohibido agregar índices a ciegas; evite ralentizar la inserción de datos, aumentar el espacio ocupado y ralentizar las consultas.

Cada vez que la base de datos (tabla) sufra cambios estructurales, se debe registrar y guardar; periódicamente (no más de tres días hábiles) se debe realizar una copia de seguridad de la estructura de la base de datos y sus datos.

1. Al asignar cadenas a variables PHP, use preferentemente comillas simples. Las comillas simples son mucho más rápidas.

2. Al asignar valores a variables PHP, si el valor contiene variables, se deben usar comillas dobles; las comillas dobles pueden analizar variables automáticamente, lo que resulta mucho más conveniente.

Por ejemplo, $b=blue; $a="php$b"; echo $a; genera phpblue (las comillas simples y dobles tienen sus ventajas).

3. En HTML, use preferentemente comillas dobles; no importa cuán largo sea, al ponerlo en PHP basta con añadir comillas simples al inicio y al final; no tema equivocarse.

Texto original: http://www.phpboke.com/php-standard.html