1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/language/constants.xml
Pedro Antonio Gil Rodríguez 9c4337cbf2 Correcciones menores de otros usuarios
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@338573 c90b9560-bf6c-de11-be94-00142212c4b1
2016-02-07 22:18:41 +00:00

390 lines
13 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 5e9fde393a7bfdba759d9c295f6c04de0205ae45 Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<chapter xml:id="language.constants" xmlns="http://docbook.org/ns/docbook">
<title>Constantes</title>
<simpara>
Una constante es un identificador (nombre) para expresar un valor simple. Como
el nombre sugiere, este valor no puede variar durante la ejecucción del script.
(A excepción de las <link linkend="language.constants.predefined">constantes
mágicas</link>, que en realidad no son constantes).
Una constante es sensible a mayúsculas por defecto. Por convención, los identificadores de constantes
siempre suelen declararse en mayúsculas.
</simpara>
<para>
El nombre de una constante sigue las mismas reglas que cualquier otra etiqueta de PHP.
Un nombre de constante válido empieza por una letra o subguión, seguido
por cualquier número o letras, números o subguiones. Usando una expresión regular,
se representaría de la siguiente manera:
<literal>[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*</literal>
</para>
&tip.userlandnaming;
<para>
<example>
<title>Nombres de constantes correctos e incorrectos</title>
<programlisting role="php">
<![CDATA[
<?php
// Nombre de constantes correctos
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// Nombres de constantes incorrectos
define("2FOO", "something");
// Esto es válido, pero debería ser evitado:
// Ya que quizá algún día PHP crea una constante mágica
// con el mismo nombre y en ese caso provocaría un error en tu script
define("__FOO__", "something");
?>
]]>
</programlisting>
</example>
</para>
<note>
<simpara>
Para nuestros propósitos, entenderemos como letra los carácteres
a-z, A-Z, y los ASCII del 127 hasta el 255 (0x7f-0xff).
</simpara>
</note>
<simpara>
Igual que las &link.superglobals;, el acceso a una constante es global. Se
puede acceder a constantes desde cualquier sitio del script sin importar desde donde.
Para más información en el acceso, lea el manual en la sección
<link linkend="language.variables.scope">acceso a variables</link>.
</simpara>
<sect1 xml:id="language.constants.syntax">
<title>Sintaxis</title>
<simpara>
Se puede definir una constante usando la función
<function>define</function> o también declarándola fuera de la clase
con <literal>const</literal> desde PHP 5.3.0. Una vez que la constante
está definida, no puede ser cambiada o redifinida en ningún momento.
</simpara>
<simpara>
Antes de PHP 5.6, solamente los datos escalares (<type>boolean</type>, <type>integer</type>,
<type>float</type> y <type>string</type>) pueder estar contenidos
en constante. Desde PHP 5.6 en adelante, es posible
definir una constante como una expresión escalar, y también es posible
definir un <type>array</type> constante. Es posible definir
constantes como un <type>resource</type>, pero debería evitarse, ya que podría
ocasionar resultados inesperados.
</simpara>
<simpara>
Para obtener el valor de una constante solo es necesario especificar su nombre.
A diferencia de las variables, <emphasis>no</emphasis> se debe prefijar una
constante con el signo <literal>$</literal>.
También se puede usar la función <function>constant</function> para leer el
valor de una constante si se desea obtener el valor de una constante de forma
dinámica.
Use <function>get_defined_constants</function> para obtener una lista de todas
las constantes definidas.
</simpara>
<note>
<simpara>
Las contantes y las variables (globales) se encuentran en un espacio
de nombres distinto. Esto implica que por ejemplo &true; y
<varname>$TRUE</varname> son diferentes.
</simpara>
</note>
<simpara>
Si se usa una constante que todavía no está definida, PHP asume que se está refiriendo
al nombre de la constante en si, igual que si fuera
una <type>string</type> (CONSTANT vs "CONSTANT"). Cuando esto suceda,
se mostrará un error de nivel <link linkend="ref.errorfunc">E_NOTICE</link>.
Ver también la sección en el manual de porqué
<link linkend="language.types.array.foo-bar">$foo[bar]</link> es incorrecto (a no ser que
primero <function>define</function> <literal>bar</literal> como constante). Esto no se aplica a las <link
linkend="language.namespaces.rules">constantes (completamente) cualificadas</link>,
lo cual emitirá un error fatal si no está definida. Si simplemente
quiere comprobar si una constante está definida, use la función <function>defined</function>.
</simpara>
<para>
Estas son las diferencias entre constantes y variables:
<itemizedlist>
<listitem>
<simpara>
Las constantes no llevan el signo dólar (<literal>$</literal>),
como prefijo.
</simpara>
</listitem>
<listitem>
<simpara>
Antes de PHP 5.3, las constantes solo podían ser definidas usando la
función <function>define</function>, y no por simple asignación.
</simpara>
</listitem>
<listitem>
<simpara>
Las constantes pueden ser definidas y accedidas desde cualquier
sitio sin importar las reglas de acceso de variables.
</simpara>
</listitem>
<listitem>
<simpara>
Las constantes no pueden ser redefinidas o eliminadas una vez
se han definido; y
</simpara>
</listitem>
<listitem>
<simpara>
Las constantes podrían evaluarse como valores escalares. A partir de PHP 5.6 es posible
definir una constante de array con la palabra reservada <literal>const</literal>, y, a partir
de PHP 7, las constantes de array también se pueden definir con <function>define</function>.
Se pueden utilizar arrays en expresiones escalares constantes
(por ejemplo, <literal>const FOO = array(1,2,3)[0];</literal>),
aunque el resultado final debe ser un valor de un tipo permitido.
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
<example>
<title>Definición de constantes</title>
<programlisting role="php">
<![CDATA[
<?php
define("CONSTANTE", "Hola mundo.");
echo CONSTANTE; // muestra "Hola mundo."
echo Constante; // muestra "Constant" y se emite un aviso.
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Definición de constantes usando el la palabra reservada <literal>const</literal></title>
<programlisting role="php">
<![CDATA[
<?php
// Funciona a partir de PHP 5.3.0
const CONSTANTE = 'Hola Mundo';
echo CONSTANTE;
// Funciona a partir de PHP 5.6.0
const OTRA_CONSTANTE = CONSTANTE.'; Adiós Mundo';
echo OTRA_CONSTANTE;
const ANIMALES = array('perro', 'gato', 'pájaro');
echo ANIMALES[1]; // muestra "gato"
// Funciona a partir de PHP 7
define('ANIMALES', array(
'perro',
'gato',
'pájaro'
));
echo ANIMALES[1]; // muestra "gato"
?>
]]>
</programlisting>
</example>
</para>
<note>
<para>
A diferencia de definir constantes usando <function>define</function>,
las constantes definidas con la palabra clave <literal>const</literal>
deben declararse en el nivel superior del entorno de la aplicación
porque se definen en tiempo de ejecución. Esto significa que no pueden
declararse dentro de funciones, bucles, sentencias <literal>if</literal>
o bloques <literal>try</literal>/
<literal>catch</literal>.
</para>
</note>
<simpara>
Vea también <link linkend="language.oop5.constants">Constantes de clase</link>.
</simpara>
</sect1>
<sect1 xml:id="language.constants.predefined">
<title>Constantes predefinidas</title>
<simpara>
PHP ofrece un largo número de <link
linkend="reserved.constants">constantes predefinidas</link> a cualquier script
en ejecucción. Muchas de estas constantes, sin embargo, son creadas por diferentes
extensiones, y sólo estarán presentes si dichas extensiones están disponibles,
bien por carga dinámica o porque han sido compiladas.
</simpara>
<para>
Hay ocho constantes predefinidas que cambian dependiendo de donde son usadas.
Por ejemplo el valor de <constant>__LINE__</constant> depende en la línea que
se use en el script. Estas constantes especiales son sensibles a mayúsculas
y son las siguientes:
</para>
<para>
<table>
<title>Varias constantes "mágicas" de PHP</title>
<tgroup cols="2">
<thead>
<row>
<entry>Nombre</entry>
<entry>Descripción</entry>
</row>
</thead>
<tbody>
<row xml:id="constant.line">
<entry><constant>__LINE__</constant></entry>
<entry>
El número de línea actual en el fichero.
</entry>
</row>
<row xml:id="constant.file">
<entry><constant>__FILE__</constant></entry>
<entry>
Ruta completa y nombre del fichero con enlaces simbólicos resueltos. Si se usa dentro de un include,
devolverá el nombre del fichero incluido.
</entry>
</row>
<row xml:id="constant.dir">
<entry><constant>__DIR__</constant></entry>
<entry>
Directorio del fichero. Si se utiliza dentro de un include,
devolverá el directorio del fichero incluído. Esta constante es
igual que <literal>dirname(__FILE__)</literal>. El nombre del
directorio no lleva la barra final a no ser que esté en el
directorio root.
</entry>
</row>
<row xml:id="constant.function">
<entry><constant>__FUNCTION__</constant></entry>
<entry>
Nombre de la función.
</entry>
</row>
<row xml:id="constant.class">
<entry><constant>__CLASS__</constant></entry>
<entry>
Nombre de la clase. El nombre de la clase incluye
el namespace declarado en (p.e.j. <literal>Foo\Bar</literal>).
Tenga en cuenta que a partir de PHP 5.4 __CLASS__ también funciona con traits.
Cuando es usado en un método trait, __CLASS__ es el nombre de la clase del trait
que está siendo utilizado.
</entry>
</row>
<row xml:id="constant.trait">
<entry><constant>__TRAIT__</constant></entry>
<entry>
El nombre del trait. El nombre del trait incluye el espacio de nombres
en el que fue declarado (p.e.j. <literal>Foo\Bar</literal>).
</entry>
</row>
<row xml:id="constant.method">
<entry><constant>__METHOD__</constant></entry>
<entry>
Nombre del método de la clase.
</entry>
</row>
<row xml:id="constant.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
Nombre del espacio de nombres actual.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Véase también
<function>get_class</function>,
<function>get_object_vars</function>,
<function>file_exists</function>&listendand;
<function>function_exists</function>.
</para>
<sect2 xml:id="language.constants.predefined.changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>5.4.0</entry>
<entry>
Se añadió la constante <constant>__TRAIT__</constant>
</entry>
</row>
<row>
<entry>5.3.0</entry>
<entry>
Se añadieron las constantes <constant>__DIR__</constant> y <constant>__NAMESPACE__</constant>
</entry>
</row>
<row>
<entry>5.0.0</entry>
<entry>
Se añadió la constante <constant>__METHOD__</constant>
</entry>
</row>
<row>
<entry>5.0.0</entry>
<entry>
Antes de esta versión, los valores de algunas constantes mágicas estaban siempre en minúsculas.
Ahora todas ellas están en mayúsculas (contienen nombres mientras eran declaradas).
</entry>
</row>
<row>
<entry>4.3.0</entry>
<entry>
Se añadieron las constantes <constant>__FUNCTION__</constant> y <constant>__CLASS__</constant>
</entry>
</row>
<row>
<entry>4.0.2</entry>
<entry>
<constant>__FILE__</constant> siempre contiene una ruta absoluta con enlaces
simbólicos resueltos, mientras que en versiones antiguas contenía una ruta relativa
bajo algunas circunstancias
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</sect2>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->