From ce2dfbae43521289ff6567d30d30951ea17e4e53 Mon Sep 17 00:00:00 2001 From: lacatoire Date: Wed, 2 Sep 2026 10:04:40 +0200 Subject: [PATCH] sync: add namespace caveats to define(), defined(), and constant() --- reference/misc/functions/constant.xml | 25 ++++++++++++++++++++++-- reference/misc/functions/define.xml | 28 +++++++++++++++++++++++++-- reference/misc/functions/defined.xml | 26 ++++++++++++++++++++++--- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/reference/misc/functions/constant.xml b/reference/misc/functions/constant.xml index c2e1177875..7dece2354a 100644 --- a/reference/misc/functions/constant.xml +++ b/reference/misc/functions/constant.xml @@ -1,6 +1,5 @@ - - + constant @@ -34,6 +33,28 @@ El nombre de la constante. + + + constant toma el nombre como un + string ordinario y no lo resuelve con respecto al + espacio de nombres + actual: el nombre se busca en el espacio de nombres global, por lo que + un nombre sin calificar puede devolver silenciosamente una constante + diferente a la que el mismo identificador sin prefijo haría referencia. + Para recuperar el valor de una constante declarada en un espacio de + nombres, el espacio de nombres debe formar parte del nombre, como en + constant('Mi\Espacio\MICONSTANTE') o + constant(__NAMESPACE__ . '\MICONSTANTE'). + Como el nombre es una cadena simple, los alias introducidos por + sentencias use y el prefijo + namespace\ no se aplican a él. + En una cadena entre comillas dobles, los separadores de espacio de + nombres deben escaparse, como en + "Mi\\Espacio\\MICONSTANTE". + La parte del espacio de nombres del nombre no distingue entre + mayúsculas y minúsculas, el nombre de la constante sí lo hace. + + diff --git a/reference/misc/functions/define.xml b/reference/misc/functions/define.xml index 93b661d01f..feb40c4af2 100644 --- a/reference/misc/functions/define.xml +++ b/reference/misc/functions/define.xml @@ -1,6 +1,5 @@ - - + define @@ -37,6 +36,31 @@ ser recuperados con la función constant. Sin embargo, hacer esto no se recomienda. + + define toma el nombre como un + string ordinario y no lo resuelve con respecto al + espacio de nombres + actual. + Dentro de namespace Mi\Espacio;, + define('MICONSTANTE', 1) define + MICONSTANTE en el espacio de nombres global, + silenciosamente y sin error. + Para situar la constante en un espacio de nombres, el espacio de nombres + debe formar parte del nombre, escrito sin un separador de espacio de + nombres inicial, como en + define('Mi\Espacio\MICONSTANTE', 1) o + define(__NAMESPACE__ . '\MICONSTANTE', 1). + A diferencia de defined y + constant, define no elimina + un separador inicial: + define('\Mi\Espacio\MICONSTANTE', 1) devuelve &true; + pero crea una constante que nunca puede ser recuperada. + Como el nombre es una cadena simple, los alias introducidos por + sentencias use no se aplican a él. + En una cadena entre comillas dobles, los separadores de espacio de + nombres deben escaparse, como en + "Mi\\Espacio\\MICONSTANTE". + diff --git a/reference/misc/functions/defined.xml b/reference/misc/functions/defined.xml index b7ec95966c..90343735fd 100644 --- a/reference/misc/functions/defined.xml +++ b/reference/misc/functions/defined.xml @@ -1,7 +1,5 @@ - - - + defined @@ -43,6 +41,28 @@ El nombre de la constante. + + + defined toma el nombre como un + string ordinario y no lo resuelve con respecto al + espacio de nombres + actual: el nombre se busca en el espacio de nombres global, por lo que + un nombre sin calificar puede comprobar silenciosamente una constante + diferente a la que el mismo identificador sin prefijo haría referencia. + Para verificar si una constante declarada en un espacio de nombres está + definida, el espacio de nombres debe formar parte del nombre, como en + defined('Mi\Espacio\MICONSTANTE') o + defined(__NAMESPACE__ . '\MICONSTANTE'). + Como el nombre es una cadena simple, los alias introducidos por + sentencias use y el prefijo + namespace\ no se aplican a él. + En una cadena entre comillas dobles, los separadores de espacio de + nombres deben escaparse, como en + "Mi\\Espacio\\MICONSTANTE". + La parte del espacio de nombres del nombre no distingue entre + mayúsculas y minúsculas, el nombre de la constante sí lo hace. + +