Lenguaje y Normas de Desarrollo: Difference between revisions

Jump to navigation Jump to search
m
no edit summary
mNo edit summary
Line 23: Line 23:


* Cuando varias variables deben ser inicializadas con el mismo valor, utilize múltiples líneas
* Cuando varias variables deben ser inicializadas con el mismo valor, utilize múltiples líneas
<pre>
<source lang="php">
$var1=1;$var2=1;$var3=1;
$var1=1;$var2=1;$var3=1;
</pre>
</source>
en lugar de
en lugar de
<pre>
<source lang="php">
$var1=$var2=$var3=1;
$var1=$var2=$var3=1;
</pre>
</source>
que es menos eficiente.
que es menos eficiente.


* las cadenas deben de ser encuadradas con comillas simples y las variables sacadas de la cadena.
* las cadenas deben de ser encuadradas con comillas simples y las variables sacadas de la cadena.
<pre>
<source lang="php">
print 'Mi texo muestra mi '.$variable.' !';
print 'Mi texo muestra mi '.$variable.' !';
</pre>
</source>


* Los comentarios deben seguir la sintaxis de C, es decir, una doble barra invertida para una línea de comentario y el uso de una barra con arterisco para abrir un bloque de varias líneas
* Los comentarios deben seguir la sintaxis de C, es decir, una doble barra invertida para una línea de comentario y el uso de una barra con arterisco para abrir un bloque de varias líneas
<pre>
<source lang="php">
 
/* Bloque de comentarios
/* Bloque de comentarios
  *
  *
Line 54: Line 53:
}
}


</pre>
</source>


* Los ficheros deben ser guardados en formato Unix (LF) y no en formato Windows (CR/LF). El formato Unix es compatible con los SO Unix, Windows, Mac, mientras que el formato de archivo de texto de Windows es problemático en algunos PHP en Unix.
* Los ficheros deben ser guardados en formato Unix (LF) y no en formato Windows (CR/LF). El formato Unix es compatible con los SO Unix, Windows, Mac, mientras que el formato de archivo de texto de Windows es problemático en algunos PHP en Unix.
Line 64: Line 63:


* ¡Los SELECT * están prohibidos! Cada Select deberá especificar la lista completa de los campos para recuperar. Esto permitirá evitar confusiones. Ejemplo:
* ¡Los SELECT * están prohibidos! Cada Select deberá especificar la lista completa de los campos para recuperar. Esto permitirá evitar confusiones. Ejemplo:
<pre>
<source lang="sql">
SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = '$id'
SELECT field_a, field_b, field_c FROM table_1 WHERE field_d = '$id'
</pre>
</source>


* En las consultas SQL, entrecomillaremos los campos, pero no los numéricos que contengan cantidades que se almacenen en los campos de tipo double o real. Los entrecomillados en los numéricos de tipo float se almacenan con un valor diferente. Por ejemplo 412.62 dentro del insert se guardara con el valor 412.61999512 en base si el campo es de tipo double(24,8). Y PHP sólo ve 412.61999512. Otras herramientas verán 412.62 dando la impresión de que no hay problemas. Y PHP tiene razón, hay un problema en base. Mediante la eliminación de las comillas en los numéricos, esto irá  mejor.
* En las consultas SQL, entrecomillaremos los campos, pero no los numéricos que contengan cantidades que se almacenen en los campos de tipo double o real. Los entrecomillados en los numéricos de tipo float se almacenan con un valor diferente. Por ejemplo 412.62 dentro del insert se guardara con el valor 412.61999512 en base si el campo es de tipo double(24,8). Y PHP sólo ve 412.61999512. Otras herramientas verán 412.62 dando la impresión de que no hay problemas. Y PHP tiene razón, hay un problema en base. Mediante la eliminación de las comillas en los numéricos, esto irá  mejor.


Ejemplo:
Ejemplo:
<pre>
<source lang="sql">
Bien:INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', 412.62)
Bien:INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', 412.62)
Mal: INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', '412.62')
Mal: INSERT INTO table_1 (field_txt, field_num) VALUES ('txt', '412.62')
</pre>
</source>


Nota, el problema de los float es general y no sólamete en el acceso a la base de datos, está presente en todos los lenguajes cuando trabajamos sobre números reales, por lo que deberán ser limpiados por la función price2num con el segundo parámetro rellenado con:
Nota, el problema de los float es general y no sólamete en el acceso a la base de datos, está presente en todos los lenguajes cuando trabajamos sobre números reales, por lo que deberán ser limpiados por la función price2num con el segundo parámetro rellenado con:
Line 94: Line 93:
* Los enlaces href deben de ser absolutos. para las páginas, basarse en la constante DOL_URL_ROOT que apunta a htdocs, para las imágenes basarse en la llamada de la función img_picto.
* Los enlaces href deben de ser absolutos. para las páginas, basarse en la constante DOL_URL_ROOT que apunta a htdocs, para las imágenes basarse en la llamada de la función img_picto.
Por ejemplo:
Por ejemplo:
<pre>
<source lang="php">
print '<a href="'.DOL_URL_ROOT.'/monrep/mapage.php">'.img_picto('Texte alt','nompictopng','').'</a>';
print '<a href="'.DOL_URL_ROOT.'/monrep/mapage.php">'.img_picto('Texte alt','nompictopng','').'</a>';
</pre>
</source>


* Javascript y la llamada a scripts java en las páginas php está fuera de las normas. Si de todas maneras se incluye código javascript, debe estar condicionado mediante el test "$conf->use_javascript"
* Javascript y la llamada a scripts java en las páginas php está fuera de las normas. Si de todas maneras se incluye código javascript, debe estar condicionado mediante el test "$conf->use_javascript"
<pre>
<source lang="php">
if ($conf->use_javascript)
if ($conf->use_javascript)
{
{
...  // El código PHP que genera el javascript va aquí
...  // El código PHP que genera el javascript va aquí
}
}
</pre>
</source>


* Las ventanas emergentes  no deben de ser utilizadas, exceptuando los tooltips (y quedan condicionados por el punto anterior).
* Las ventanas emergentes  no deben de ser utilizadas, exceptuando los tooltips (y quedan condicionados por el punto anterior).
Line 143: Line 142:
Tanto en PHP como en otros lenguajes (Java, por ejemplo), los datos no enteros (float, real, double) no son fialbes.
Tanto en PHP como en otros lenguajes (Java, por ejemplo), los datos no enteros (float, real, double) no son fialbes.
Pruebe a realizar por ejemplo
Pruebe a realizar por ejemplo
<pre>
<source lang="php">
print 239.2 - 229.3 - 9.9;
print 239.2 - 229.3 - 9.9;
</pre>
</source>
No obtendrá 0, sino un número muy pequeño en potencia 10 negativo . Si obtiene cero, puede encontrar otros ejemplos que no funcionan.
No obtendrá 0, sino un número muy pequeño en potencia 10 negativo . Si obtiene cero, puede encontrar otros ejemplos que no funcionan.
El problema de los float es general, una variable resultante del cálculo de números reales debe SISTEMATICAMENTE ser limpiada mediante la función price2num con el segundo parámetro rellenado con: 'MU', 'MT' ó 'MS' según el caso (ver doc de la función).
El problema de los float es general, una variable resultante del cálculo de números reales debe SISTEMATICAMENTE ser limpiada mediante la función price2num con el segundo parámetro rellenado con: 'MU', 'MT' ó 'MS' según el caso (ver doc de la función).
<pre>
<source lang="php">
print price2num(239.2 - 229.3 - 9.9, 'MT');
print price2num(239.2 - 229.3 - 9.9, 'MT');
</pre>
</source>
Si no es un precio que se ajuste a los parámetros de MU, MT, MS debe utilizar la función '''round()'''.
Si no es un precio que se ajuste a los parámetros de MU, MT, MS debe utilizar la función '''round()'''.


Line 164: Line 163:
DOL_DATA_ROOT.'/mimodulo'.
DOL_DATA_ROOT.'/mimodulo'.
La carpeta puede crearse en desde su código mediante el código siguiente:
La carpeta puede crearse en desde su código mediante el código siguiente:
<pre>
<source lang="php">
$mymoduledir=DOL_DATA_ROOT.'/mimodulo';
$mymoduledir=DOL_DATA_ROOT.'/mimodulo';
if (! is_dir($mymoduledir)) create_exdir($mymoduledir);
if (! is_dir($mymoduledir)) create_exdir($mymoduledir);
</pre>
</source>


Si necesita una carpeta de datos temporales, esta carpeta deberá ser DOL_DATA_ROOT.'/minmodulo/temp'
Si necesita una carpeta de datos temporales, esta carpeta deberá ser DOL_DATA_ROOT.'/minmodulo/temp'

Navigation menu