Constantes dentro de una cadena de texto
Buscaba hoy la manera de resolver esto:
Del mismo modo que puedo utilizar variables dentro de una cadena de texto:
<?php $nombre = "Manolo"; $alias = "El del bombo"; echo "Me llamo $nombre ($alias)"; // Bien: Devuelve 'Me llamo Manolo (El del bombo)' ?>
Hasta donde yo sé, no es posible hacer nada parecido con las constantes:
<?php
define("NOMBRE", "Manolo");
define("ALIAS", "El del bombo");
echo "Me llamo NOMBRE (ALIAS)";
// Mal: Devuelve 'Me llamo NOMBRE (ALIAS)'
?>
El único modo posible sería este:
<?php
echo "Me llamo ".NOMBRE ."(".ALIAS.")";
// Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?>
Pero a mi siempre me resultó bastante incómoda esta sintaxis:
”texto ”.$variable_o_CONSTANTE.” siguiente texto”
Así que hoy decidí apartar un poco de tiempo para buscar un modo de incluir constantes dentro de una cadena de texto con misma libertad que tengo cuando uso variables. Y creo que lo encontré
Para empezar, define() no es la única manera de definir una constante. En php.net he visto que las constantes se pueden definir dentro de clases, y que lo hacen con una sintaxis un poco diferente:
<?php
class constantes
{
const NOMBRE = "Manolo";
const ALIAS = "El del bombo";
}
?>
Y a estas constantes puedes llamarlas así:
<?php echo constantes::NOMBRE; ?>
Hasta ahí, estupendo, pero el problema viene cuando quiero llamar a la constante desde una instancia:
<?php $c = new constantes(); echo "Me llamo $c::NOMBRE ($c::ALIAS)"; // Mal: Devuelve 'Me llamo ()' ?>
Tirando de Google, encontré en cristalab.com una solución que me ha parecido elegante. Ellos publicaron en marzo de 2007 el artículo Cómo usar y acceder a constantes en clases de PHP y en él proponían añadir una función privada que permitiera llamar a cualquiera de esas constantes. La cosa queda así
<?php
class constantes
{
const NOMBRE = "Manolo";
const ALIAS = "El del bombo";
private function __get($name)
{
if(defined("self::$name"))
{
return constant("self::$name");
}
trigger_error("$name isn't defined");
}
}
?>
De modo que ahora ya puedo hacer esto:
<?php $c = new constantes(); echo "Me llamo $c->NOMBRE ($c->ALIAS)"; // Bien: Devuelve 'Me llamo Manolo (El del bombo)' ?>
Acerca de esta entrada
Estás leyendo “Constantes dentro de una cadena de texto”, de Quenerapú
- Publicado:
- 23|06|2009 a las 16:13h.
- Categoría(s):
- PHP
- Etiquetas:
- clase, constantes
2 comentarios
Añadir comentario | comments rss [?] | trackback uri [?]