mirror of
https://github.com/php/doc-es.git
synced 2026-03-26 00:12:06 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@338573 c90b9560-bf6c-de11-be94-00142212c4b1
390 lines
13 KiB
XML
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
|
|
-->
|