<?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>Daniel Segovia</title>
	<atom:link href="http://www.danielsegovia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danielsegovia.com</link>
	<description>Blog personal</description>
	<lastBuildDate>Wed, 22 Feb 2012 18:43:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Seguridad en aplicaciones Web</title>
		<link>http://www.danielsegovia.com/seguridad-en-aplicaciones-web/</link>
		<comments>http://www.danielsegovia.com/seguridad-en-aplicaciones-web/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 18:40:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[7.4 Seguridad]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=795</guid>
		<description><![CDATA[Es verdad que un porcentaje muy alto de los usuarios que usen nuestras aplicaciones seguirán los pasos que nosotros pretendemos que hagan. Luego tendremos un grupo reducido de usuarios que por medio de algún error hagan que la aplicación no se comporte como nosotros deseamos. Por último tendremos un grupo de usuarios malintencionados que busquen [...]]]></description>
			<content:encoded><![CDATA[<p>Es verdad que un porcentaje muy alto de los usuarios que usen nuestras aplicaciones seguirán los pasos que nosotros pretendemos que hagan.<br />
Luego tendremos un grupo reducido de usuarios que por medio de algún error hagan que la aplicación no se comporte como nosotros deseamos.<br />
Por último tendremos un grupo de usuarios malintencionados que busquen errores en nuestra aplicación con fines varios, pueden buscar robar información, el hecho romper simplemente por maldad, instalar algo en el servidor donde corre nuestra aplicación o cualquier otro fin.<br />
Sin importar que grupo de usuarios está accediendo a nuestra aplicación debemos tener un sistema seguro.<br />
Existen muchos niveles que puede ser blanco de ataque, así que desde el lado que nos compete debemos tomar todos los recaudos para que su funcionamiento sea óptimo y seguro.</p>
<p>Como primera medida es fundamental no creerle al usuario, nosotros pretendemos que el usuario nos envíe un número y él nos termina enviando una cadena de texto, por error, negligencia o mal intención. Para evitarlo validaremos que lo que recibimos es lo que pretendemos recibir.</p>
<p><a href="http://www.danielsegovia.com/entradas-de-usuarios/">En el ejemplo</a> anterior lo que se envía por el formulario ingresa directamente en la base de datos, ahora nosotros sabemos que queremos que llegue, entonces haremos un cast, esto significa forzar a que el dato se convierta en el tipo de dato que deseamos.</p>
<p>PHP ofrece estas posibilidades para forzar los tipos de datos.</p>
<ul>
<li>(int), (integer) &#8211; forzado a integer</li>
<li>(bool), (boolean) &#8211; forzado a boolean</li>
<li>(float), (double), (real) &#8211; forzado a float</li>
<li>(string) &#8211; forzado a string</li>
<li>(array) &#8211; forzado a array</li>
<li>(object) &#8211; forzado a object</li>
<li>(unset) &#8211; forzado a NULL (PHP 5)</li>
</ul>
<p>Le agregamos algunos campos al formulario para trabajar con más tipos de datos.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Registrarse&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Registraci&amp;oacute;n&lt;/h1&gt;
&lt;form method=&quot;post&quot; action=&quot;registrarse.php&quot;&gt;
    &lt;table width=&quot;400&quot;&gt;
        &lt;tr&gt;
            &lt;td width=&quot;150&quot;&gt;&lt;label&gt;Nombre:&lt;/label&gt;&lt;/td&gt;
            &lt;td width=&quot;250&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;nombre&quot; /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;label&gt;Email:&lt;/label&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;email&quot; /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;label&gt;Edad:&lt;/label&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;edad&quot; /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;label&gt;Colores:&lt;/label&gt;&lt;/td&gt;
            &lt;td&gt;
                Rojo - &lt;input type=&quot;checkbox&quot; name=&quot;colores[]&quot; value=&quot;Rojo&quot; /&gt; &lt;br /&gt;
                Celeste - &lt;input type=&quot;checkbox&quot; name=&quot;colores[]&quot; value=&quot;Celeste&quot; /&gt; &lt;br /&gt;
                Blanco - &lt;input type=&quot;checkbox&quot; name=&quot;colores[]&quot; value=&quot;Blanco&quot; /&gt; &lt;br /&gt;
                Negro - &lt;input type=&quot;checkbox&quot; name=&quot;colores[]&quot; value=&quot;Negro&quot; /&gt; &lt;br /&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;label&gt;Contrase&amp;ntilde;a:&lt;/label&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;password&quot; name=&quot;contrasena&quot;/&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td colspan=&quot;2&quot; align=&quot;right&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;registrarse&quot; value=&quot;Registrarse&quot;/&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Y aquí el procesamiento de lo que viene por el formulario tomando los recaudos de los que estamos hablando.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$mysqli</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> mysqli<span style="color: #009900;">&#40;</span><span style="color: #158C15;">&quot;localhost&quot;</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;usuario&quot;</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;password&quot;</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;nombre_base&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">mysqli_connect_errno</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">&quot;Imposible conectarse: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #000000;">,</span> <span style="color: #990000;">mysqli_connect_error</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #0000FF;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$query</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">&quot;INSERT INTO usuarios (nombre,email,edad,colores,contrasena) VALUES (?,?,?,?,?)&quot;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #000088;">$nombre</span> <span style="color: #000000;">=</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'nombre'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$email</span> <span style="color: #000000;">=</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$edad</span> <span style="color: #000000;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'edad'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$colores</span> <span style="color: #000000;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">array</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'colores'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$contrasena</span> <span style="color: #000000;">=</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'contrasena'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #000088;">$colores</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$colores</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;,&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Ejecuto el método prepare y este me va a devolver el objeto */</span>
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$stmt</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$mysqli</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* Reemplazo las ? por las variable con bind_param */</span>
    <span style="color: #000088;">$stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">bind_param</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'ssiss'</span><span style="color: #000000;">,</span> <span style="color: #000088;">$nombre</span><span style="color: #000000;">,</span> <span style="color: #000088;">$email</span><span style="color: #000000;">,</span> <span style="color: #000088;">$edad</span><span style="color: #000000;">,</span> <span style="color: #000088;">$colores</span><span style="color: #000000;">,</span> <span style="color: #000088;">$contrasena</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* ejecuto el  query */</span>
    <span style="color: #000088;">$stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* cierro stmt */</span>
    <span style="color: #000088;">$stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Registrarse&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;<span style="color: #FF0303; font-weight: bold;">&lt;?=</span><span style="color: #000088;">$nombre</span><span style="color: #000000;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>, usted se ha registrado exitosamente&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/seguridad-en-aplicaciones-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entradas de usuarios</title>
		<link>http://www.danielsegovia.com/entradas-de-usuarios/</link>
		<comments>http://www.danielsegovia.com/entradas-de-usuarios/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 19:38:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[7.3 Entradas de usuarios]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formularios php]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[procesar]]></category>
		<category><![CDATA[submit]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=786</guid>
		<description><![CDATA[Ahora que podemos mezclar el HTML y PHP necesitaremos que el usuario empiece a interactuar en nuestra plataforma. Una registro de usuarios es un ejemplo de la interacción que estoy hablando, el usuario completará sus datos en un formulario, luego estos serán enviados a un archivo PHP para ser procesados, de esta manera comenzaremos a [...]]]></description>
			<content:encoded><![CDATA[<p>Ahora que podemos mezclar el HTML y PHP necesitaremos que el usuario empiece a interactuar en nuestra plataforma.<br />
Una registro de usuarios es un ejemplo de la interacción que estoy hablando, el usuario completará sus datos en un formulario, luego estos serán enviados a un archivo PHP para ser procesados, de esta manera comenzaremos a ver como el usuario nos enviará información, en este caso lo guardaremos en una base de datos, pero es a modo de ejemplo ya que el proceso a realizar es indiferente para nosotros por que cualquiera sea la acción que tomemos no es importante, lo importante aquí es que estaremos recibiendo información a través del formulario para realizar la acción que creamos conveniente.</p>
<p>Los formularios HTML podemos, a grandes rasgos, dividirlos en 4.</p>
<ul>
<li>Apertura del formulario con el tag &lt;form></li>
<li>Los tags para que el usuario ingrese la información, por ejemplo &lt;input>, &lt;textarea> o &lt;select> entre otros</li>
<li>El botón para enviar el formulario con el tag &lt;input></li>
<li>EL cierre del formulario con el tag &lt;/form></li>
</ul>
<p>Creamos un formulario que pida al usuario ingresar su nombre completo, su email y una contraseña, estos datos serán enviados a un archivo PHP y será el encargado de guardarlos en una base de datos MySQL</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Registrarse&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Registraci&amp;oacute;n&lt;/h1&gt;
&lt;form method=&quot;post&quot; action=&quot;registrarse.php&quot;&gt;
    &lt;table width=&quot;400&quot;&gt;
        &lt;tr&gt;
            &lt;td width=&quot;150&quot;&gt;&lt;label&gt;Nombre:&lt;/label&gt;&lt;/td&gt;
            &lt;td width=&quot;250&quot;&gt;&lt;input type=&quot;text&quot; name=&quot;nombre&quot; /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;label&gt;Email:&lt;/label&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;email&quot; /&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;label&gt;Contrase&amp;ntilde;a:&lt;/label&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input type=&quot;password&quot; name=&quot;contrasena&quot;/&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td colspan=&quot;2&quot; align=&quot;right&quot;&gt;&lt;input type=&quot;submit&quot; name=&quot;registrarse&quot; value=&quot;Registrarse&quot;/&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Como podemos observar muchos de los tags HTML que utilizamos tienen lo que se denominan atributos</p>
<p>El tag &lt;form> posee 2 atributos, el primero es <em>method</em> y éste especificará el método HTTP que usará cuando envíe la información. El segundo es <em>action</em> y especifica donde será enviada la información cuando el formulario sea enviado.</p>
<p>Luego tenemos el tag &lt;input> nuestro primero atributo es <em>type</em> y posee las siguientes variantes button, checkbox, file, hidden, image, password, radio, reset, submit, text, en este ejemplo usamos 3 de éstas, text que será un campo de texto libre, password que también será un campo de texto libre pero no serán mostrados los caracteres que iremos tipeando y por último submit que será un botón que al presionarlo enviará el formulario completo al <em>action</em> del <em>form</em>. También tenemos el atributo <em>name</em> que es un nombre que identificará al elemento y el último atributo usado aquí es <em>value</em> este será el valor predeterminado que tomará el elemento.</p>
<p>Ahora recibamos la información que nos provee el formulario y guardemos ésta en la base de datos.<br />
Creamos un archivo registrarse.php (que es el action del formulario) e insertamos los datos.<br />
La información nos llegará al archivo PHP en un array llamado $_POST los índices del array serán igual a los <em>name</em> que hemos definido en el formulario</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$mysqli</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> mysqli<span style="color: #009900;">&#40;</span><span style="color: #158C15;">&quot;localhost&quot;</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;usuario&quot;</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;password&quot;</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;base&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">mysqli_connect_errno</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">&quot;Imposible conectarse: <span style="color: #009933; font-weight: bold;">%s</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #000000;">,</span> <span style="color: #990000;">mysqli_connect_error</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #0000FF;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$query</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">&quot;INSERT INTO usuarios (nombre,email,contrasena) VALUES (?,?,?)&quot;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/* Ejecuto el método prepare y este me va a devolver el objeto */</span>
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$stmt</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$mysqli</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* Reemplazo las ? por las variable con bind_param */</span>
    <span style="color: #000088;">$stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">bind_param</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'sss'</span><span style="color: #000000;">,</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'nombre'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">,</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'contrasena'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* ejecuto el  query */</span>
    <span style="color: #000088;">$stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* cierro stmt */</span>
    <span style="color: #000088;">$stmt</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Registrarse&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;<span style="color: #FF0303; font-weight: bold;">&lt;?=</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'nombre'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>, usted se ha registrado exitosamente&lt;/h1&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/entradas-de-usuarios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Separando la lógica de la vista</title>
		<link>http://www.danielsegovia.com/separando-la-logica-de-la-vista/</link>
		<comments>http://www.danielsegovia.com/separando-la-logica-de-la-vista/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 18:57:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[7.2 Embeber código]]></category>
		<category><![CDATA[<?=]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[embeber codigo]]></category>
		<category><![CDATA[logica]]></category>
		<category><![CDATA[separar codigo de logica]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=776</guid>
		<description><![CDATA[Vamos a embeber código de la mejor manera posible, separando 100% la lógica que le queremos dar al sistema de la vista que lo va a mostrar. La manera es con include o require, básicamente programaremos nuestra lógica en un archivo y este será incluido por nuestra vista. &#60;?php //logica.php if &#40;date&#40;'H'&#41; &#62;= 14 &#38;&#38; [...]]]></description>
			<content:encoded><![CDATA[<p>Vamos a embeber código de la mejor manera posible, separando 100% la lógica que le queremos dar al sistema de la vista que lo va a mostrar.<br />
La manera es con include o require, básicamente programaremos nuestra lógica en un archivo y este será incluido por nuestra vista.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//logica.php</span>
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&gt;=</span> <span style="color: #cc66cc;">14</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&lt;=</span> <span style="color: #cc66cc;">19</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mensaje</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">'Buenos tardes'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #0000FF;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&gt;=</span> <span style="color: #cc66cc;">6</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&lt;=</span> <span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mensaje</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">'Buenos d&amp;iacute;as'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #0000FF;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mensaje</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">'Buenos noches'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//index.php</span>
<span style="color: #0000FF;">include</span> <span style="color: #158C15;">&quot;logica.php&quot;</span><span style="color: #000000;">;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Saludo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
<span style="color: #FF0303; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$mensaje</span><span style="color: #000000;">;</span> <span style="color: #FF0303; font-weight: bold;">?&gt;</span>
<span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//Usar &lt;?php echo $mansaje; ?&gt; es lo mismo que usar &lt;?=$mensaje;?&gt;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Veamos el resultado.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Saludo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
Buenos tardes&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/separando-la-logica-de-la-vista/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embebiendo código PHP y organizándolo</title>
		<link>http://www.danielsegovia.com/embebiendo-codigo-php-y-organizandolo/</link>
		<comments>http://www.danielsegovia.com/embebiendo-codigo-php-y-organizandolo/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 16:35:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[7.2 Embeber código]]></category>
		<category><![CDATA[embeber codigo]]></category>
		<category><![CDATA[html php]]></category>
		<category><![CDATA[ordenar codigo]]></category>
		<category><![CDATA[php html]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=773</guid>
		<description><![CDATA[En el ejemplo anterior podemos observar como embebimos código PHP dentro de una estructura de HTML. Aquí trabajaremos en un concepto similar pero la diferencia será el orden que le demos a nuestro bloques de código. Por lo general, lo más recomendable es separar nuestro código PHP y HTML lo más posible, esta separación puede [...]]]></description>
			<content:encoded><![CDATA[<p>En el <a href="http://www.danielsegovia.com/embeber-codigo-php/" title="embeber codigo php">ejemplo anterior</a> podemos observar como embebimos código PHP dentro de una estructura de HTML.<br />
Aquí trabajaremos en un concepto similar pero la diferencia será el orden que le demos a nuestro bloques de código.<br />
Por lo general, lo más recomendable es separar nuestro código PHP y HTML lo más posible, esta separación puede darse en archivos diferentes trabajando con <a href="http://www.danielsegovia.com/funcion-include/" title="include en php">includes</a> o bien separaremos nuestro código en bloques, por un lado la lógica del PHP y por el otro el HTML. Esto hará mucho más legible el sistema en si, tanto como para futuras modificaciones como también para que cuando algún colega desarrollador necesite añadir, modificar o eliminar parte nuestro desarrollo.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&gt;=</span> <span style="color: #cc66cc;">14</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&lt;=</span> <span style="color: #cc66cc;">19</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mensaje</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">'Buenos tardes'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #0000FF;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&gt;=</span> <span style="color: #cc66cc;">6</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&lt;=</span> <span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mensaje</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">'Buenos d&amp;iacute;as'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #0000FF;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$mensaje</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">'Buenos noches'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Saludo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
<span style="color: #FF0303; font-weight: bold;">&lt;?php</span> <span style="color: #0000FF;">echo</span> <span style="color: #000088;">$mensaje</span><span style="color: #000000;">;</span> <span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>El resultado es el mismo que antes.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Saludo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
Buenos tardes&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/embebiendo-codigo-php-y-organizandolo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embeber código PHP</title>
		<link>http://www.danielsegovia.com/embeber-codigo-php/</link>
		<comments>http://www.danielsegovia.com/embeber-codigo-php/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 16:12:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[7.2 Embeber código]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[embeber]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php y html]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=767</guid>
		<description><![CDATA[Naturalmente PHP no puede ser embebido en archivos HTML ya que éstos últimos, en configuraciones predeterminadas, no serán procesados por el interprete de PHP. Sin embargo, si estamos desarrollando una aplicación web necesitaremos tener código HTML y PHP en un mismo archivo. Los archivos con extensión .php serán procesados por el interprete, pero este interprete [...]]]></description>
			<content:encoded><![CDATA[<p>Naturalmente PHP no puede ser embebido en archivos HTML ya que éstos últimos, en configuraciones predeterminadas, no serán procesados por el interprete de PHP.<br />
Sin embargo, si estamos desarrollando una aplicación web necesitaremos tener código HTML y PHP en un mismo archivo.<br />
Los archivos con extensión .php serán procesados por el interprete, pero este interprete solamente procesará el contenido delimitado dos tags <em><?php</em> que da comienzo al código php y <em>?></em> que finaliza el mismo, lo que este por fuera de éstos tags no será procesado, por ende puede ser tranquilamente código HTML</p>
<p>Un ejemplo</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Saludo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
<span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #0000FF;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&gt;=</span> <span style="color: #cc66cc;">14</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&lt;=</span> <span style="color: #cc66cc;">19</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">'Buenos tardes'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #0000FF;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&gt;=</span> <span style="color: #cc66cc;">6</span> <span style="color: #000000;">&amp;&amp;</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H'</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">&lt;=</span> <span style="color: #cc66cc;">13</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">'Buenos d&amp;iacute;as'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #0000FF;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">'Buenos noches'</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span>
&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Aquí viene la parte importante, todo lo que es procesado en php y enviado a la salida, en este caso con <em>echo</em>, se transforma en simple texto plano, para este caso el resultado del script será el siguiente.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Saludo&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
Buenos tardes&lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>Como puede observarse en el resultado se imprime el &#8220;Buenas tardes&#8221;, esto se produce por que la hora en la que se ejecuto el script fue cerca de las 15, por lo tanto en condicional entro en las condiciones de mayor e igual a 14 y menor e igual a 19.<br />
Al fin y al cabo lo importante no es por que parte de if sigue el flujo del sistema, en este punto lo más importante de comprender es que la salida es texto plano, que luego será nuestra salida será interpretada por el navegador con el que estemos visualizando la página web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/embeber-codigo-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducción al desarrollo de aplicaciones web</title>
		<link>http://www.danielsegovia.com/introduccion-al-desarrollo-de-aplicaciones-web/</link>
		<comments>http://www.danielsegovia.com/introduccion-al-desarrollo-de-aplicaciones-web/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 15:11:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[7.1 Introducción]]></category>
		<category><![CDATA[html php]]></category>
		<category><![CDATA[paginas web]]></category>
		<category><![CDATA[paginas web con php]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=764</guid>
		<description><![CDATA[La mayoría de las páginas web está hecha en PHP por lo tanto en este capítulo veremos la interacción que existe entre el HTML y PHP. Aquí una lista global de lo que estaremos realizando a continuación Embeber código PHP en archivos HTML Mostrar contenido dinámico Recoger información de formularios Seguridad sobre la información recibida [...]]]></description>
			<content:encoded><![CDATA[<p>La mayoría de las páginas web está hecha en PHP por lo tanto en este capítulo veremos la interacción que existe entre el HTML y PHP.<br />
Aquí una lista global de lo que estaremos realizando a continuación</p>
<ul>
<li>Embeber código PHP en archivos HTML</li>
<li>Mostrar contenido dinámico</li>
<li>Recoger información de formularios</li>
<li>Seguridad sobre la información recibida</li>
<li>Datos persistentes a través de Cookies y Sessions</li>
<li>Organizar una aplicación Web</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/introduccion-al-desarrollo-de-aplicaciones-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrón Proxy</title>
		<link>http://www.danielsegovia.com/patron-proxy/</link>
		<comments>http://www.danielsegovia.com/patron-proxy/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 16:08:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[6.7 Patrón Proxy]]></category>
		<category><![CDATA[patron proxy]]></category>
		<category><![CDATA[patron proxy php]]></category>
		<category><![CDATA[proxy]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=758</guid>
		<description><![CDATA[El patrón Proxy en PHP es sencillo de entender, es utilizado como intermediario para acceder a un objeto llamado SujetoReal. Básicamente, tenemos un objeto Proxy que actúa como un sustituto de un objeto SujetoReal. Se realiza una solicitud al Proxy y éste es el encargado de transmitirla a SujetoReal El objeto Proxy posee una referencia [...]]]></description>
			<content:encoded><![CDATA[<p>El patrón Proxy en PHP es sencillo de entender, es utilizado como intermediario para acceder a un objeto llamado <em>SujetoReal</em>.<br />
Básicamente, tenemos un objeto Proxy que actúa como un sustituto de un objeto <em>SujetoReal</em>. Se realiza una solicitud al Proxy y éste es el encargado de transmitirla a <em>SujetoReal</em><br />
El objeto Proxy posee una referencia al objeto <em>SujetoReal</em> y controla el acceso a sus métodos y propiedades, introduciendo las funcionalidades que cree necesarias.</p>
<p>Posibles tipos de Proxies</p>
<ul>
<li><strong>Proxy Remoto</strong>: Cuando el objeto proxy está en una dirección y el objeto real está en otra. En este caso proxy puede funcionar como corta fuegos (firewall). Es muy común ver este esquema con los juegos en línea donde se necesita el mismo objeto en diferentes lugares al mismo tiempo.</li>
<li><strong>Proxy Virtual</strong>: Puede almacenar en caché información, de modo que el acceso al objeto real puede ser postergada</li>
<li><strong>Proxy de protección</strong>: Mantiene la protección de la solicitud al objeto real hasta que la solicitud es verificada por el servidor proxy de protección</li>
</ul>
<p>Veamos un ejemplo sencillo</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #0000FF;">abstract</span> <span style="color: #0000FF;">class</span> ISujeto<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">abstract</span> <span style="color: #0000FF;">protected</span> <span style="color: #0000FF;">function</span> request<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">class</span> Proxy <span style="color: #0000FF;">extends</span> ISujeto<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">private</span> <span style="color: #000088;">$SujetoReal</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> request<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>	
        <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;agregando funciona al inicio &lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">SujetoReal</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> SujetoReal<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">SujetoReal</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>	
        <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;agregando funciona al final &lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> SujetoReal <span style="color: #0000FF;">extends</span> ISujeto<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">protected</span> <span style="color: #0000FF;">function</span> request<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;Ejecutando request en &quot;</span> <span style="color: #000000;">.</span> <span style="color: #0000FF;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//implementacion</span>
<span style="color: #0000FF;">class</span> Usuarios<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">private</span> <span style="color: #000088;">$proxy</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">proxy</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> Proxy<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> hacerX<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">proxy</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">request</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$objeto</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> Usuarios<span style="color: #000000;">;</span>
<span style="color: #000088;">$objeto</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">hacerX</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Resultado</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">agregando funciona al inicio
Ejecutando request en SujetoReal
agregando funciona al final</pre></div></div>

<p>Como podemos ver, agregamos un mensaje al inicio y uno al final de la llamada al <em>SujetoReal</em>.<br />
Esto es una introducción al patrón Proxy y el ejemplo intenta demostrar fácilmente una estructura del patrón y una implementación. En proyectos grandes es un común ver este tipo de esquemas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/patron-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrón Modelo Vista Controlador</title>
		<link>http://www.danielsegovia.com/patron-modelo-vista-controlador/</link>
		<comments>http://www.danielsegovia.com/patron-modelo-vista-controlador/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 19:12:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[6.6 Patrón MVC]]></category>
		<category><![CDATA[controlador]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[patron mvc]]></category>
		<category><![CDATA[vista]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=751</guid>
		<description><![CDATA[MVC son las siglas del patrón de arquitectura Modelo Vista Controlador (model view controller en inglés) que se encarga de separar los datos en una aplicación. Podemos ver fácilmente MVC en el diseño de una página web. Por un lado tenemos el resultado final, el HTML, en esta caso la vista, por otro lado tenemos [...]]]></description>
			<content:encoded><![CDATA[<p>MVC son las siglas del patrón de arquitectura Modelo Vista Controlador (model view controller en inglés) que se encarga de separar los datos en una aplicación.</p>
<p>Podemos ver fácilmente MVC en el diseño de una página web. Por un lado tenemos el resultado final, el HTML, en esta caso la <strong>vista</strong>, por otro lado tenemos un montón de información guardada en nuestra base de datos, toda la interacción con ella será procesada por el <strong>modelo</strong> y la toma de decisiones, por ejemplo mostrar distintos contenidos para diferentes niveles de usuarios, estará a cargo del <strong>controlador</strong></p>
<ul>
<li><strong>Modelo</strong>: El modelo se encarga del acceso a la información, independientemente de donde y como este guardada, éste será el encargado de retornar, en un formato especifico, la información que estén solicitando. Los datos o información en principio no tendrían importancia para nuestro controlador y vista, el modelo extraerá lo necesario ya sea de un archivo de texto, una base de datos, un xml o de algún otro medio</li>
<li><strong>Vista</strong>: La vista tiene como objetivo visualizar todo lo previamente procesado. Suponiendo que estamos desarrollando el juego del ta-te-ti, por lo general un jugador juega con la &#8220;X&#8221; y el otro con la &#8220;O&#8221;, nuestra vista puede mostrar esto o &#8220;X&#8221; e &#8220;Y&#8221; o &#8220;W&#8221; y &#8220;Z&#8221; para cada jugador, también cada jugador podría tener una imagen asignada. Estos cambios serán fácil implementando MVC ya que la lógica del juego estará en otras capas de la aplicación</li>
<li><strong>Controlador</strong>: El controlador será el encargado de tomar decisiones. Cualquier tipo de camino que se siga el flujo del sistema será por que el controlador desviará éste flujo según la decisión que tome. Continuando con el ta-te-ti el controlador dará turno al siguiente jugador o dirá cuando el juego esta terminado</li>
</ul>
<p>Bueno, empecemos con el ejemplo en código.<br />
Aquí mostraré 4 archivos, la versión completa pueden descargarla <a href="http://www.danielsegovia.com/ejemplos/ejemplomvc.tar">aquí</a></p>
<p>Aquí el index.php, básicamente este se encarga de juntar todas las partes, recibe dos parámetro por <a href="http://www.danielsegovia.com/superglobals/" title="SuperGlobals">GET</a>, uno es el controlador y el otro la acción (el método) que debe ejecutar.</p>
<p>Luego de algunas validaciones simples instancia el controlador y ejecuta la acción.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//index.php</span>
<span style="color: #0000FF;">define</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'CARPETACONTROLADORES'</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;controladores/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">define</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'CARPETAMODELOS'</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;modelos/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">define</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'CARPETAVISTAS'</span><span style="color: #000000;">,</span> <span style="color: #158C15;">&quot;vistas/&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000000;">!</span><span style="color: #0000FF;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'controlador'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$controlador</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'controlador'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
    <span style="color: #000088;">$file</span> <span style="color: #000000;">=</span> CARPETACONTROLADORES <span style="color: #000000;">.</span> <span style="color: #000088;">$controlador</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;.php&quot;</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">require_once</span> <span style="color: #000088;">$file</span><span style="color: #000000;">;</span>
        <span style="color: #000088;">$objecto</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> <span style="color: #000088;">$controlador</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #0000FF;">else</span><span style="color: #009900;">&#123;</span>
          <span style="color: #0000FF;">die</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'El controlador no existe'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #0000FF;">else</span><span style="color: #009900;">&#123;</span>
          <span style="color: #0000FF;">die</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'No ha definido un controlador'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000000;">!</span><span style="color: #0000FF;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'accion'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$accion</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #158C15;">'accion'</span><span style="color: #009900;">&#93;</span><span style="color: #000000;">;</span>
    <span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000000;">!</span><span style="color: #0000FF;">method_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$controlador</span><span style="color: #000000;">,</span> <span style="color: #000088;">$accion</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">die</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'El metodo '</span><span style="color: #000000;">.</span><span style="color: #000088;">$accion</span><span style="color: #000000;">.</span><span style="color: #158C15;">' no existe en el controlador '</span> <span style="color: #000000;">.</span> <span style="color: #000088;">$controlador</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #0000FF;">else</span><span style="color: #009900;">&#123;</span>
          <span style="color: #0000FF;">die</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'No ha definido una accion'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$objecto</span><span style="color: #000000;">-&gt;</span><span style="color: #000088;">$accion</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Controlador</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//usuarios.php</span>
<span style="color: #0000FF;">require_once</span> CARPETACONTROLADORES <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;controlador.php&quot;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #0000FF;">class</span> usuarios <span style="color: #0000FF;">extends</span> controlador <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">require_once</span> CARPETAMODELOS <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;modeloUsuarios.php&quot;</span><span style="color: #000000;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">modelo</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> modeloUsuarios<span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">function</span> listar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$usuarios</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">modelo</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">listar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #0000FF;">require_once</span> CARPETAVISTAS <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;usuariosListar.php&quot;</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Modelo</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//modeloUsuarios.php</span>
<span style="color: #0000FF;">require_once</span> CARPETAMODELOS <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;modelo.php&quot;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #0000FF;">class</span> modeloUsuarios <span style="color: #0000FF;">extends</span> modelo<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        parent<span style="color: #000000;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">function</span> listar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$query</span> <span style="color: #000000;">=</span> <span style="color: #158C15;">&quot;SELECT nombre, apellido FROM usuarios&quot;</span><span style="color: #000000;">;</span>
        <span style="color: #000088;">$result</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">mysqli</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$query</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #0000FF;">return</span> <span style="color: #000088;">$result</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Por sí no vieron el link más arriba <img src='http://www.danielsegovia.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Descarguen el ejemplo funcionando desde <a href="http://www.danielsegovia.com/ejemplos/ejemplomvc.tar">aquí</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/patron-modelo-vista-controlador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrón de estrategia</title>
		<link>http://www.danielsegovia.com/patron-de-estrategia/</link>
		<comments>http://www.danielsegovia.com/patron-de-estrategia/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 19:43:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[6.5 Patrón de Estrategia]]></category>
		<category><![CDATA[estrategia]]></category>
		<category><![CDATA[estrategia php]]></category>
		<category><![CDATA[patron estrategia]]></category>
		<category><![CDATA[patron estrategia php]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=743</guid>
		<description><![CDATA[Cuando tenemos un algoritmo que por algún motivo puede llegar a cambiar en tiempo de ejecución o bien su implementación podemos trabajar con el patrón de estrategia para que éste decida que camino tomar. Básicamente consiste en definir una interfase con los métodos del algoritmo para luego plantear cada uno de éstos en las clases [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando tenemos un algoritmo que por algún motivo puede llegar a cambiar en tiempo de ejecución o bien su implementación podemos trabajar con el patrón de estrategia para que éste decida que camino tomar.<br />
Básicamente consiste en definir una interfase con los métodos del algoritmo para luego plantear cada uno de éstos en las clases que implementen la interfase.<br />
Cada algoritmo estará encapsulado y será intercambiable independientemente de los clientes que lo utilicen.</p>
<p>Veamos el siguiente ejemplo, tenemos un array con el nombre de un producto y el precio. Para algunos clientes es conveniente mostrarlos en orden alfabética y en otros en orden ascendente de precio.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #0000FF;">interface</span> estrategia<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> ordenar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> OrdenarPorNombre implements estrategia<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> ordenar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">ksort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #0000FF;">return</span> <span style="color: #000088;">$productos</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> OrdenarPorPrecio implements estrategia<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> ordenar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">asort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #0000FF;">return</span> <span style="color: #000088;">$productos</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> usuarios <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">private</span> <span style="color: #000088;">$productos</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> getProductos<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">return</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">productos</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> setProductos<span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">productos</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$productos</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> mostrar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$estrategia</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$estrategia</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">ordenar</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">getProductos</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$productos</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">array</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'Remera'</span><span style="color: #000000;">=&gt;</span><span style="color: #cc66cc;">20</span><span style="color: #000000;">,</span> <span style="color: #158C15;">'Campera'</span><span style="color: #000000;">=&gt;</span><span style="color: #cc66cc;">50</span><span style="color: #000000;">,</span> <span style="color: #158C15;">'Patalon'</span><span style="color: #000000;">=&gt;</span><span style="color: #cc66cc;">35</span><span style="color: #000000;">,</span> <span style="color: #158C15;">'Gorro'</span><span style="color: #000000;">=&gt;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #000088;">$u</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> usuarios<span style="color: #000000;">;</span>
<span style="color: #000088;">$u</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">setProductos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$productos</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$u</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">mostrar</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> OrdenarPorNombre<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$u</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">mostrar</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> OrdenarPorPrecio<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Resultado</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Array
(
    [Campera] =&gt; 50
    [Gorro] =&gt; 10
    [Patalon] =&gt; 35
    [Remera] =&gt; 20
)
&nbsp;
Array
(
    [Gorro] =&gt; 10
    [Remera] =&gt; 20
    [Patalon] =&gt; 35
    [Campera] =&gt; 50
)</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/patron-de-estrategia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Patrón Observador</title>
		<link>http://www.danielsegovia.com/patron-observador/</link>
		<comments>http://www.danielsegovia.com/patron-observador/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 21:45:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[6.4 Patrón Observador]]></category>
		<category><![CDATA[observado]]></category>
		<category><![CDATA[observador]]></category>
		<category><![CDATA[Patrón Observador]]></category>

		<guid isPermaLink="false">http://www.danielsegovia.com/?p=730</guid>
		<description><![CDATA[El patrón observador es sencillo de entender y más fácil de ver cuando es necesario. Tendremos 2 objetos, por un lado el observador y por el otro el observado. El observador debe ver cuando el observado realiza algún cambio y tomar determinada acción. El modelos antiguos el observador miraba constantemente al observado para ver cuando [...]]]></description>
			<content:encoded><![CDATA[<p>El patrón observador es sencillo de entender y más fácil de ver cuando es necesario.<br />
Tendremos 2 objetos, por un lado el observador y por el otro el observado.<br />
El observador debe ver cuando el observado realiza algún cambio y tomar determinada acción.<br />
El modelos antiguos el observador miraba constantemente al observado para ver cuando éste cambiada, el problema de éste modelo es que había que mirar constantemente al observado para ver cuando realizaba una modificación.<br />
Con el patrón observador cambiaron un poco los roles, tenemos el mismo esquema, observador y observado, la diferente es que observador no estará &#8220;mirando&#8221; todo el tiempo a observado para ver cuando hay un cambio, sino que éste último le avisará mediante una notificación a su observador cuando haga efectivo dicho cambio.</p>
<p>En un ejemplo de la vida cotidiana:</p>
<p>- Un padre ve como su niño anda en bicicleta, él esta ateto el 100% del tiempo mirando que no se golpee, sí un accidente ocurriese el padre se enteraría al instante ya que ve lo que sucedió. Aquí vemos como el observador está monitoreando constantemente al observado.<br />
- Un niño esta andando en bicicleta y al tener un incidente éste avisa a su padre. Aquí vemos como el observado notifica a su observador en determinado evento.</p>
<p>Vamos a los papeles, aquí el código<br />
Separaremos las clases de la implementación, estará en 2 archivos, modelo.php e implementacion.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//modelo.php</span>
<span style="color: #0000FF;">abstract</span> <span style="color: #0000FF;">class</span> observable<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">protected</span> <span style="color: #000088;">$observadores</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> registrarObservador<span style="color: #009900;">&#40;</span><span style="color: #000088;">$observador</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000000;">!</span><span style="color: #0000FF;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$observador</span><span style="color: #000000;">,</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000FF;">array_push</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span><span style="color: #000000;">,</span> <span style="color: #000088;">$observador</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> eliminarObservador<span style="color: #009900;">&#40;</span><span style="color: #000088;">$observador</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$observador</span><span style="color: #000000;">,</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$key</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$observador</span><span style="color: #000000;">,</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
            <span style="color: #0000FF;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">abstract</span> <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> notificarObservador<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #0000FF;">interface</span> observador<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #000000;">,</span> <span style="color: #000088;">$parametro</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> Usuario <span style="color: #0000FF;">extends</span> observable<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #000088;">$parametro</span><span style="color: #000000;">;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        parent<span style="color: #000000;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> notificarObservador<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span><span style="color: #009900;">&#41;</span>  <span style="color: #000000;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000FF;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">observadores</span> <span style="color: #0000FF;">as</span> <span style="color: #000088;">$observador</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$observador</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">notificar</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #000000;">,</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">parametro</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #0000FF;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;No hay observadores&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> setParametro<span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">parametro</span> <span style="color: #000000;">=</span> <span style="color: #000088;">$value</span><span style="color: #000000;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">notificarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> getParametro<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">return</span> <span style="color: #000088;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">parametro</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> <span style="color: #0000FF;">Log</span> implements Observador<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #000000;">,</span> <span style="color: #000088;">$parametro</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;El objeto &quot;</span> <span style="color: #000000;">.</span> <span style="color: #0000FF;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot; ha cambiado la propiedad `parametro` al valor de '<span style="color: #006699; font-weight: bold;">$parametro</span>' a las &quot;</span> <span style="color: #000000;">.</span> <span style="color: #0000FF;">date</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'H:i:s'</span><span style="color: #000000;">,</span> <span style="color: #0000FF;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> LogDB implements Observador<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #000000;">,</span> <span style="color: #000088;">$parametro</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;El objeto &quot;</span> <span style="color: #000000;">.</span> <span style="color: #0000FF;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot; ha guardado la propiedad `parametro` por valor de '<span style="color: #006699; font-weight: bold;">$parametro</span>' en la base de datos&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #0000FF;">class</span> LogEmail implements Observador<span style="color: #009900;">&#123;</span>
    <span style="color: #0000FF;">public</span> <span style="color: #0000FF;">function</span> notificar<span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #000000;">,</span> <span style="color: #000088;">$parametro</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #0000FF;">echo</span> <span style="color: #0000FF;">get_class</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remitente</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot; notifica un cambio y ha sido enviado por mail&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Vamos a dividir la explicación de modelo.php en 4</p>
<ul>
<li>Definimos una <a href="http://www.danielsegovia.com/abstraccion-en-clases-y-metodos/" title="Clase Abstracta">clase abstracta</a> observable, todas las clases que extiendan de ésta podrán ser observadas, también podrán registrar y eliminar observadores y deberán implementar la notificación</li>
<li>Definimos una <a href="http://www.danielsegovia.com/interfaces/" title="Interfaces">interfaz</a> observador, todos los observadores implementarán ésta interfaz y estarán obligadas a poseer el método notificar, sí bien éste paso podría pasarse por alto es una muy buen practica</li>
<li>Definimos la clase que va a ser observada, en este ejemplo usamos una clase llamada Usuario y ésta notificará a sus observadores cuando la propiedad método haya cambiado su valor</li>
<li>Por último definimos los observadores que implementan la interfaz y todos poseen el método notificar, aquí definimos 3 observadores, un muestra un mensaje, otro guarda en base de datos y el último da un aviso por mail</li>
</ul>
<p>Aquí la implementación, veremos diferentes maneras en las implementaciones.</p>
<p>Implementación 1:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//implementacion1.php</span>
<span style="color: #000088;">$ob</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> Usuario<span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">setParametro</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'Daniel'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;Parametro: &quot;</span> <span style="color: #000000;">.</span> <span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">getParametro</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--resultado--&gt;
No hay observadores
Parametro: Daniel</pre></div></div>

<p>Implementación 2:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//implementacion2.php</span>
<span style="color: #000088;">$ob</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> Usuario<span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> <span style="color: #0000FF;">Log</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">setParametro</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'Marcos'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;Parametro: &quot;</span> <span style="color: #000000;">.</span> <span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">getParametro</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--resultado--&gt;
El objeto Usuario ha cambiado la propiedad `parametro` al valor de 'Marcos' a las 18:40:46
Parametro: Marcos</pre></div></div>

<p>Implementación 3:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//implementacion3.php</span>
<span style="color: #000088;">$ob</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> Usuario<span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> <span style="color: #0000FF;">Log</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> LogDB<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> LogEmail<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">setParametro</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'Federico'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;Parametro: &quot;</span> <span style="color: #000000;">.</span> <span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">getParametro</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--resultado--&gt;
El objeto Usuario ha cambiado la propiedad `parametro` al valor de 'Federico' a las 18:42:08
El objeto Usuario ha guardado la propiedad `parametro` por valor de 'Federico' en la base de datos
Usuario notifica un cambio y ha sido enviado por mail
Parametro: Federico</pre></div></div>

<p>Implementación 4:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #FF0303; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">//implementacion4.php</span>
<span style="color: #000088;">$ob</span> <span style="color: #000000;">=</span> <span style="color: #0000FF;">new</span> Usuario<span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> <span style="color: #0000FF;">Log</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> LogDB<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">registrarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> LogEmail<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">setParametro</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'Hugo'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;Parametro: &quot;</span> <span style="color: #000000;">.</span> <span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">getParametro</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #0000FF;">sleep</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
&nbsp;
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">eliminarObservador</span><span style="color: #009900;">&#40;</span><span style="color: #0000FF;">new</span> LogDB<span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">setParametro</span><span style="color: #009900;">&#40;</span><span style="color: #158C15;">'Diego'</span><span style="color: #009900;">&#41;</span><span style="color: #000000;">;</span>
<span style="color: #0000FF;">echo</span> <span style="color: #158C15;">&quot;Parametro: &quot;</span> <span style="color: #000000;">.</span> <span style="color: #000088;">$ob</span><span style="color: #000000;">-&gt;</span><span style="color: #004000;">getParametro</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000;">.</span> <span style="color: #158C15;">&quot;&lt;br /&gt;&quot;</span><span style="color: #000000;">;</span>
<span style="color: #FF0303; font-weight: bold;">?&gt;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;!--resultado--&gt;
El objeto Usuario ha cambiado la propiedad `parametro` al valor de 'Hugo' a las 18:43:45
El objeto Usuario ha guardado la propiedad `parametro` por valor de 'Hugo' en la base de datos
Usuario notifica un cambio y ha sido enviado por mail
Parametro: Hugo
El objeto Usuario ha cambiado la propiedad `parametro` al valor de 'Diego' a las 18:43:47
Usuario notifica un cambio y ha sido enviado por mail
Parametro: Diego</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.danielsegovia.com/patron-observador/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

