Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
253 changes: 153 additions & 100 deletions language/constants.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4c352e683436649edba35a3272210d8ca4cae611 Maintainer: lacatoire Status: ready -->
<!-- EN-Revision: 5dc21d42fd5c1a8d6b0e45869c4fe3c3ac8e9a2c Maintainer: lacatoire Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="language.constants" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
<title>Constantes</title>
Expand Down Expand Up @@ -283,112 +283,165 @@ echo ANIMALS_DEF[1] . "\n"; // muestra "cat"

<sect1 xml:id="language.constants.magic">
<title>Constantes mágicas</title>
<para>
Existen varias constantes mágicas que cambian dependiendo de
dónde se utilicen. Por ejemplo, el valor de
<constant>__LINE__</constant> depende de la línea en la que se
use en el script. Todas estas constantes "mágicas" se resuelven
en tiempo de compilación, a diferencia de las constantes regulares,
que se resuelven en tiempo de ejecución.
Estas constantes especiales no distinguen entre mayúsculas y minúsculas
y son las siguientes:
</para>
<para>
<table>
<title>Constantes mágicas de PHP</title>
<tgroup cols="2">
<thead>
<row>
<entry>&Name;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row xml:id="constant.line">
<entry><constant>__LINE__</constant></entry>
<entry>
El número de línea actual del archivo.
</entry>
</row>
<row xml:id="constant.file">
<entry><constant>__FILE__</constant></entry>
<entry>
La ruta completa y el nombre del archivo con los enlaces simbólicos
resueltos. Si se usa dentro de un include, se devuelve el nombre
del archivo incluido.
</entry>
</row>
<row xml:id="constant.dir">
<entry><constant>__DIR__</constant></entry>
<entry>
El directorio del archivo. Si se usa dentro de un include,
se devuelve el directorio del archivo incluido. Es equivalente a
<literal>dirname(__FILE__)</literal>. El nombre del directorio
no incluye la barra final a menos que sea el directorio raíz.
</entry>
</row>
<row xml:id="constant.function">
<entry><constant>__FUNCTION__</constant></entry>
<entry>
El nombre de la función, o <literal>{closure}</literal> para
las funciones anónimas.
</entry>
</row>
<row xml:id="constant.class">
<entry><constant>__CLASS__</constant></entry>
<entry>
El nombre de la clase. El nombre de la clase incluye el espacio de
nombres en el que fue declarada (p. ej. <literal>Foo\Bar</literal>).
Cuando se usa en un método de trait, <constant>__CLASS__</constant>
es el nombre de la clase en la que se utiliza el trait.
</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. ej. <literal>Foo\Bar</literal>).
</entry>
</row>
<row xml:id="constant.method">
<entry><constant>__METHOD__</constant></entry>
<entry>
El nombre del método de la clase.
</entry>
</row>
<row xml:id="constant.property">
<entry><constant>__PROPERTY__</constant></entry>
<entry>
Solo es válido dentro de un <link linkend="language.oop5.property-hooks">hook
de propiedad</link>. Es igual al nombre de la propiedad.
</entry>
</row>
<row xml:id="constant.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
El nombre del espacio de nombres actual.
</entry>
</row>
<row xml:id="constant.coloncolonclass">
<entry><constant><replaceable>ClassName</replaceable>::class</constant></entry>
<entry>
El nombre completo cualificado de la clase.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<simpara>
Las constantes mágicas son palabras clave que se sustituyen por información
sobre su propia ubicación en el código fuente: su archivo y su línea, así
como la función, clase, trait, espacio de nombres o hook de propiedad que
las contiene.
A pesar de su nombre, no son constantes reales:
<function>defined</function> y <function>constant</function> no las
reconocen, y una constante del mismo nombre creada con
<function>define</function> no las afecta. No distinguen entre mayúsculas
y minúsculas.
Cuando se usan fuera del contexto correspondiente (p. ej.
<constant>__CLASS__</constant> fuera de una clase), se sustituyen por una
cadena vacía.
</simpara>
<table>
<title>Constantes mágicas de PHP</title>
<tgroup cols="2">
<thead>
<row>
<entry>&Name;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row xml:id="constant.line">
<entry><constant>__LINE__</constant></entry>
<entry>
El número de la línea en la que está escrita.
</entry>
</row>
<row xml:id="constant.file">
<entry><constant>__FILE__</constant></entry>
<entry>
La ruta completa y el nombre del archivo en el que está escrita,
con los enlaces simbólicos resueltos.
</entry>
</row>
<row xml:id="constant.dir">
<entry><constant>__DIR__</constant></entry>
<entry>
El directorio del archivo, equivalente a
<literal>dirname(__FILE__)</literal>. No incluye la barra final
a menos que sea el directorio raíz.
</entry>
</row>
<row xml:id="constant.function">
<entry><constant>__FUNCTION__</constant></entry>
<entry>
El nombre de la función en la que está escrita, incluido su espacio
de nombres (p. ej. <literal>Foo\bar</literal>).
Dentro de un método, solo el nombre del método.
Para las funciones anónimas, un nombre generado por el motor que
incluye el lugar donde se definió la closure (a partir de PHP 8.4.0;
anteriormente <literal>{closure}</literal>).
</entry>
</row>
<row xml:id="constant.class">
<entry><constant>__CLASS__</constant></entry>
<entry>
El nombre de la clase en la que está escrita, incluido su espacio
de nombres (p. ej. <literal>Foo\Bar</literal>).
Dentro de un trait, el nombre de la clase que usa el trait.
Para las <link linkend="language.oop5.anonymous">clases anónimas</link>,
un nombre generado por el motor.
Para obtener el nombre de la clase sobre la que se llamó a un método,
use
<link linkend="language.oop5.late-static-bindings"><literal>static::class</literal></link>.
</entry>
</row>
<row xml:id="constant.trait">
<entry><constant>__TRAIT__</constant></entry>
<entry>
El nombre del trait, incluido su espacio de nombres (p. ej. <literal>Foo\Bar</literal>).
</entry>
</row>
<row xml:id="constant.method">
<entry><constant>__METHOD__</constant></entry>
<entry>
El nombre de la clase y del método en el que está escrita
(p. ej. <literal>Foo\Bar::baz</literal>).
Dentro de un trait, se usa el nombre del trait en lugar del nombre
de la clase.
Fuera de un método, es igual que <constant>__FUNCTION__</constant>.
</entry>
</row>
<row xml:id="constant.property">
<entry><constant>__PROPERTY__</constant></entry>
<entry>
El nombre de la propiedad, cuando se usa dentro de un
<link linkend="language.oop5.property-hooks">hook de propiedad</link>.
Disponible a partir de PHP 8.4.0.
</entry>
</row>
<row xml:id="constant.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
El nombre del espacio de nombres actual.
</entry>
</row>
</tbody>
</tgroup>
</table>

<example>
<title>Uso de las constantes mágicas</title>
<programlisting role="php">
<![CDATA[
<?php
namespace App;

function helper()
{
echo __FUNCTION__, "\n";
echo __METHOD__, "\n";
}

trait Greets
{
public function greet()
{
echo __CLASS__, "\n";
echo __TRAIT__, "\n";
echo __METHOD__, "\n";
echo __FUNCTION__, "\n";
}
}

class Greeter
{
use Greets;
}

helper();
(new Greeter)->greet();
echo __NAMESPACE__, "\n";
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
App\helper
App\helper
App\Greeter
App\Greets
App\Greets::greet
greet
App
]]>
</screen>
</example>

<sect2 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.oop5.basic.class.class">::class</link></member>
<member><function>get_class</function></member>
<member><function>get_object_vars</function></member>
<member><function>file_exists</function></member>
<member><function>function_exists</function></member>
<member><function>get_called_class</function></member>
<member><function>dirname</function></member>
</simplelist>
</para>
</sect2>
Expand Down
Loading