<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Quenerapú &#187; clase</title>
	<atom:link href="http://quenerapu.com/etiquetas/clase/feed/" rel="self" type="application/rss+xml" />
	<link>http://quenerapu.com</link>
	<description>Sentado delante de un ordenador desde 1982. ¿De qué voy a hablar, si no?</description>
	<lastBuildDate>Mon, 12 Jul 2010 09:09:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Constantes dentro de una cadena de texto</title>
		<link>http://quenerapu.com/php/constantes-dentro-de-una-cadena-de-texto/</link>
		<comments>http://quenerapu.com/php/constantes-dentro-de-una-cadena-de-texto/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:13:31 +0000</pubDate>
		<dc:creator>Quenerapú</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[clase]]></category>
		<category><![CDATA[constantes]]></category>

		<guid isPermaLink="false">http://quenerapu.com/?p=117</guid>
		<description><![CDATA[Del mismo modo que puedo utilizar variables dentro de una cadena de texto, he buscado la manera de hacer lo mismo con las constantes.]]></description>
			<content:encoded><![CDATA[<p>Buscaba hoy la manera de resolver esto:</p>
<p>Del mismo modo que puedo utilizar variables <strong>dentro</strong> de una cadena de texto:</p>
<pre class="brush: php;">
&lt;?php
	$nombre = &quot;Manolo&quot;;
	$alias = &quot;El del bombo&quot;;
	echo &quot;Me llamo $nombre ($alias)&quot;;

//	Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?&gt;
</pre>
<p>Hasta donde yo sé, no es posible hacer nada parecido con las constantes:</p>
<pre class="brush: php;">
&lt;?php
	define(&quot;NOMBRE&quot;, &quot;Manolo&quot;);
	define(&quot;ALIAS&quot;, &quot;El del bombo&quot;);
	echo &quot;Me llamo NOMBRE (ALIAS)&quot;;

//	Mal: Devuelve 'Me llamo NOMBRE (ALIAS)'
?&gt;
</pre>
<p>El único modo posible sería este:</p>
<pre class="brush: php;">
&lt;?php
	echo &quot;Me llamo &quot;.NOMBRE .&quot;(&quot;.ALIAS.&quot;)&quot;;

//	Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?&gt;
</pre>
<p>Pero a mi siempre me resultó bastante incómoda esta sintaxis:</p>
<p><strong>&#8221;texto &#8221;.$variable_o_CONSTANTE.&#8221; siguiente texto&#8221;</strong></p>
<p>Así que hoy decidí apartar un poco de tiempo para buscar un modo de incluir constantes <strong>dentro</strong> de una cadena de texto con misma libertad que tengo cuando uso variables. Y creo que lo encontré <img src='http://quenerapu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Para empezar, <strong>define()</strong> no es la única manera de definir una constante. En <a href="http://php.net/manual/en/function.constant.php">php.net</a> he visto que las constantes se pueden definir dentro de clases, y que lo hacen con una sintaxis un poco diferente:</p>
<pre class="brush: php;">
&lt;?php
	class constantes
	{
	const NOMBRE = &quot;Manolo&quot;;
	const ALIAS = &quot;El del bombo&quot;;
	}
?&gt;
</pre>
<p>Y a estas constantes puedes llamarlas así:</p>
<pre class="brush: php;">
&lt;?php echo constantes::NOMBRE; ?&gt;
</pre>
<p>Hasta ahí, estupendo, pero el problema viene cuando quiero llamar a la constante desde una instancia:</p>
<pre class="brush: php;">
&lt;?php
	$c = new constantes();
	echo &quot;Me llamo $c::NOMBRE ($c::ALIAS)&quot;;

//	Mal: Devuelve 'Me llamo ()'
?&gt;
</pre>
<p>Tirando de Google, encontré en <a href="http://www.cristalab.com/">cristalab.com</a> una solución que me ha parecido elegante. Ellos publicaron en marzo de 2007 el artículo <strong><a href="http://www.cristalab.com/tips/como-usar-y-acceder-a-constantes-en-clases-de-php-c35762l/">Cómo usar y acceder a constantes en clases de PHP</a></strong> y en él proponían añadir una función privada que permitiera llamar a cualquiera de esas constantes. La cosa queda así</p>
<pre class="brush: php;">
&lt;?php
	class constantes
	{
	const NOMBRE = &quot;Manolo&quot;;
	const ALIAS = &quot;El del bombo&quot;;

	private function __get($name)
		{
		if(defined(&quot;self::$name&quot;))
			{
			return constant(&quot;self::$name&quot;);
			}
		trigger_error(&quot;$name isn't defined&quot;);
		}
	}
?&gt;
</pre>
<p>De modo que ahora ya puedo hacer esto:</p>
<pre class="brush: php;">
&lt;?php
	$c = new constantes();
	echo &quot;Me llamo $c-&gt;NOMBRE ($c-&gt;ALIAS)&quot;;

//	Bien: Devuelve 'Me llamo Manolo (El del bombo)'
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://quenerapu.com/php/constantes-dentro-de-una-cadena-de-texto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
