<?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>Pensando en Red &#187; oop</title> <atom:link href="http://pensandoenred.com/tag/oop/feed/" rel="self" type="application/rss+xml" /><link>http://pensandoenred.com</link> <description>nada es tan fácil como parece serlo</description> <lastBuildDate>Fri, 17 Feb 2012 21:28:20 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Métodos mágicos en PHP5</title><link>http://pensandoenred.com/2009/12/20/metodos-magicos-en-php5/</link> <comments>http://pensandoenred.com/2009/12/20/metodos-magicos-en-php5/#comments</comments> <pubDate>Sun, 20 Dec 2009 11:50:06 +0000</pubDate> <dc:creator>mariotux</dc:creator> <category><![CDATA[php]]></category> <category><![CDATA[magicos]]></category> <category><![CDATA[metodos]]></category> <category><![CDATA[oop]]></category> <category><![CDATA[php5]]></category> <category><![CDATA[poo]]></category> <guid
isPermaLink="false">http://www.pensandoenred.com/?p=479</guid> <description><![CDATA[Desarrollar en PHP5 con orientación a objetos cada vez es más parecido a desarrollar con Java, los "javeros" siempre comentan que PHP no hace más que "copiar" y la verdad es que razón no les falta ^_^ pero una de las particularidades que tiene el desarrollar con POO en PHP5 son los métodos mágicos. Los [...]]]></description> <content:encoded><![CDATA[<p>Desarrollar en PHP5 con orientación a objetos cada vez es más parecido a desarrollar con Java, los "javeros" siempre comentan que PHP no hace más que "copiar" y la verdad es que razón no les falta ^_^ pero una de las particularidades que tiene el desarrollar con POO en PHP5 son los <a
href="http://php.net/manual/en/language.oop5.magic.php" target="_blank">métodos mágicos</a>. Los usan cada vez con más frecuencia los frameworks de desarrollo en PHP5 y es por la flexibilidad que ofrecen en los desarrollos.</p><p>Quien no ha utilizado en algún momento en PHP5 el <em>new stdClass()</em>, al hacer una instancia de esta clase predefinida en el core de PHP5 estamos creando una clase estándar en donde las propiedades se generan de manera dinámica.</p><p>En el ejemplo del que mostraré a continuación se trata de una clase estándar donde encapsularemos el acceso a las propiedades de la clase. Utilizaremos el la encapsulación y el principio de la ocultación en la <a
href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos" target="_blank">Programación Orientada a Objetos</a> para el desarrollo de esta clase con <a
href="http://es.php.net/manual/en/language.oop5.magic.php" target="_blank">métodos mágicos</a>. No exponiendo el acceso a las propiedades en ámbito público.</p><p>La clase que vamos a crear no entiende de las posibles propiedades que puede tener el objeto, ni tampoco de los valores que almacenará y menos de acciones sobre propiedades. Simplemente almacenará N valores en diferentes propiedades de manera dinámica, simulando el comportamiento de "stdClass".</p><pre class="brush: php; ">
/**
* Clase estándar con propiedades de ámbito privado, en donde
* para acceder a las propiedades es necesario invocar métodos
* set/get bien para inicializar la propiedad o recuperar.
*
* @author mariotux
* @date 20/12/2009
*/
class MyStdClass {
private $properties;
private function __get($name) {
$name = strtolower($name);
if (array_key_exists ( $name, $this-&gt;properties)) {
return $this-&gt;properties [$name];
}else{
throw new Exception(&#039;Unknown property  &#039;. $name);
}
}
private function __set($name, $value) {
$name = strtolower($name);
if(count($value) == 1){
$this-&gt;properties [$name] = $value[0];
}else{
$this-&gt;properties [$name] = $value;
}
}
public function __call($name, $arguments) {
$methodType = substr($name, 0, 3);
$nameMethod = substr($name,3);
switch ($methodType){
case &#039;get&#039;:{
return $this-&gt;$nameMethod;
break;
}
case &#039;set&#039;:{
$this-&gt;$nameMethod = $arguments;
break;
}
default:{
throw new Exception(&#039;Unknown method  &#039;. $name);
}
}
}
public function __construct() {
$this-&gt;properties = array ();
}
}
</pre><p>Cómo podemos observar en la clase, en cuanto se intenta invocar a un método que no sea get o set generamos una excepción, al igual que también lo hacemos cuando se intenta acceder a una propiedad que no ha sido inicializada al invocar el método get de la propiedad. En el set no realizamos la comprobación ,ya que al estar asignando un valor a una propiedad siempre la trataremos como una propiedad nueva en caso de que no exista.</p><p>Este es un ejemplo de como utilizar métodos mágicos, en donde sólo estamos utilizando <em>__construct, __call, __set, __get</em> pero existen más <a
href="http://php.net/manual/en/language.oop5.magic.php" target="_blank">métodos mágicos</a> que podríamos utilizar para extender el comportamiento de la clase.</p> ]]></content:encoded> <wfw:commentRss>http://pensandoenred.com/2009/12/20/metodos-magicos-en-php5/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
