<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0"><id>tag:blogger.com,1999:blog-8925209938406741847</id><updated>2024-11-08T16:36:32.416+01:00</updated><category term="PHP Orientado a Objetos"/><category term="patrones de diseño"/><category term="jquery"/><category term="DOM"/><category term="Javascript"/><category term="XHTML y CSS"/><category term="ebook"/><category term="php"/><title type="text">Desarrollador Senior</title><subtitle type="html">Como convertirse en un "Desarrollador web Senior" y no frustrarse en el intento...escrito por Arley Triana Morín&#13;
&#13;
Blog dedicado al desarrollo de aplicaciones web altamente dinámicas. Utilizando PHP, MySQL, Patrones de Diseño, XHTML, CCS 2, XML, XSLT, JavaScript, AJAX, PHP Framework.</subtitle><link href="http://desarrolladorsenior.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default?redirect=false" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/" rel="alternate" type="text/html"/><link href="http://pubsubhubbub.appspot.com/" rel="hub"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><generator uri="http://www.blogger.com" version="7.00">Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-3796451070732063291</id><published>2012-05-06T23:57:00.001+02:00</published><updated>2015-12-22T22:37:08.263+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DOM"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="XHTML y CSS"/><title type="text">DevDocs: Documentación para desarrolladores web en un mismo lugar</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ_zs09s9pfqOfdj81VJrwSE-1nxqYpMra5SxDD_aee7fYplMKaPwwAuaZmFcYMu5UDUgsQk56Y1rPAdWii2-VeRvb1Fv7owtVXQyPF_WNbP_JsRu6CLRRPiXpgM7gG6B70XBg3WhTHxas/s1600/devdocs.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ_zs09s9pfqOfdj81VJrwSE-1nxqYpMra5SxDD_aee7fYplMKaPwwAuaZmFcYMu5UDUgsQk56Y1rPAdWii2-VeRvb1Fv7owtVXQyPF_WNbP_JsRu6CLRRPiXpgM7gG6B70XBg3WhTHxas/s320/devdocs.PNG" width="290" /&gt;&lt;/a&gt;&lt;/div&gt;
Me gustó mucho &lt;a href="http://devdocs.io/"&gt;DevDocs&lt;/a&gt;, ya que &lt;strong&gt;permite buscar de forma sencilla y clara&lt;/strong&gt; en la documentación de las especificaciones de CSS, HTML, JavaScript, DOM, sumando también las de jQuery, PHP y Python. Toda la información es sacada de los sitios oficiales o confiables.&lt;br /&gt;
&lt;br /&gt;
Muy recomendado para tener guardado entre los marcadores.</content><link href="http://desarrolladorsenior.blogspot.com/feeds/3796451070732063291/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2012/05/dochub-documentacion-para.html#comment-form" rel="replies" title="0 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/3796451070732063291" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/3796451070732063291" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2012/05/dochub-documentacion-para.html" rel="alternate" title="DevDocs: Documentación para desarrolladores web en un mismo lugar" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ_zs09s9pfqOfdj81VJrwSE-1nxqYpMra5SxDD_aee7fYplMKaPwwAuaZmFcYMu5UDUgsQk56Y1rPAdWii2-VeRvb1Fv7owtVXQyPF_WNbP_JsRu6CLRRPiXpgM7gG6B70XBg3WhTHxas/s72-c/devdocs.PNG" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-1174595211462974116</id><published>2011-03-31T15:19:00.001+02:00</published><updated>2015-12-22T23:24:05.969+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ebook"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><title type="text">Libro gratuito de jQuery en español: Fundamentos de jQuery</title><content type="html">&lt;a href="http://librojquery.com/" title="Fundamentos de jQuery"&gt;&lt;img src="http://media.tumblr.com/tumblr_lits2aTPpl1qbedm9.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Después de un par de meses de trabajo, les quería contar sobre mi pequeño aporte a la comunidad de diseñadores y desarrolladores web:&lt;b&gt; &lt;a href="http://librojquery.com/" title="Fundamentos de jQuery"&gt;Fundamentos de jQuery&lt;/a&gt;&lt;/b&gt;, &lt;b&gt;un libro-web totalmente en español para aprender jQuery desde cero&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El mismo abarca tanto &lt;b&gt;conceptos básicos&lt;/b&gt; de JavaScript/jQuery (selectores, eventos, efectos, etc) &lt;b&gt;como avanzados&lt;/b&gt; (creación de extensiones, patrones de organización del código, programación con eventos personalizados).&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El material es una adaptación del &lt;a href="https://github.com/rmurphey/jqfundamentals"&gt;trabajo original&lt;/a&gt; realizado por &lt;a href="http://www.rebeccamurphey.com/" title="Rebecca Murphey"&gt;Rebecca Murphey&lt;/a&gt;, bajo licencia &lt;a href="http://creativecommons.org/licenses/by-sa/3.0/us/"&gt;Creative Commons&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
Contenidos del material&lt;/h2&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#bienvenidoa"&gt;Capítulo 1: Bienvenido&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#conceptos-básicos-de-javascript"&gt;Capítulo 2: Conceptos Básicos de JavaScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#conceptos-básicos-de-jquery"&gt;Capítulo 3: Conceptos Básicos de jQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#el-núcleo-de-jquery"&gt;Capítulo 4: El núcleo de jQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#eventos"&gt;Capítulo 5: Eventos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#efectos"&gt;Capítulo 6: Efectos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#ajax"&gt;Capítulo 7: Ajax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#extensiones"&gt;Capítulo 8: Extensiones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#mejores-prácticas-para-aumentar-el-rendimiento"&gt;Capítulo 9: Mejores Prácticas para Aumentar el Rendimiento&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#organización-del-código"&gt;Capítulo 10: Organización del Código&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#eventos-personalizados"&gt;Capítulo 11: Eventos Personalizados&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://librojquery.com/#funciones-y-ejecuciones-diferidas-a-través-del-objeto-.deferred"&gt;Funciones y ejecuciones diferidas a través del objeto $.Deferred&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Asi que ya saben, si estan dando sus primeros pasos con &lt;b&gt;jQuery&lt;/b&gt;, quieren &lt;b&gt;aprender algunos nuevos conceptos&lt;/b&gt; o necesitan algún material de referencia en español, pueden darse una vuelta: &lt;a href="http://librojquery.com/"&gt;&lt;/a&gt;&lt;a href="http://librojquery.com/"&gt;http://librojquery.com/&lt;/a&gt;&lt;/div&gt;</content><link href="http://desarrolladorsenior.blogspot.com/feeds/1174595211462974116/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2011/03/libro-gratuito-de-jquery-en-espanol.html#comment-form" rel="replies" title="6 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/1174595211462974116" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/1174595211462974116" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2011/03/libro-gratuito-de-jquery-en-espanol.html" rel="alternate" title="Libro gratuito de jQuery en español: Fundamentos de jQuery" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-1730760238893181188</id><published>2010-05-04T21:50:00.003+02:00</published><updated>2012-12-09T18:24:17.912+01:00</updated><title type="text">Estilo arquitectónico capas</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_3sG70qBKb4Y/S-B4Tvian2I/AAAAAAAAAQo/RULX9AqY_w0/s1600/capas.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" src="http://3.bp.blogspot.com/_3sG70qBKb4Y/S-B4Tvian2I/AAAAAAAAAQo/RULX9AqY_w0/s400/capas.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_por_capas"&gt;La programación por capas&lt;/a&gt; es un estilo de programación en el que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño.[1]&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;
Cuando trabajamos sobre aplicaciones web uno de los estilos arquitectónicos utilizado es el estilo Capas. En este estilo pueden utilizarse varias variantes, con 2 capas, 3 capas y hasta n capas, siendo el más común el de 3 capas.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La ventaja principal&lt;i&gt;&lt;b&gt; &lt;/b&gt;&lt;/i&gt;de este estilo arquitectónico es que en caso de que sobrevenga algún cambio, sólo se ataca al nivel requerido sin tener que revisar entre código mezclado.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;La capa de presentación:&lt;/b&gt; es la encargada de interactuar con el usuario y se corresponde con lo que tradicionalmente se conoce como interfaz de usuario, esta capa se comunica únicamente con la capa de negocio. Un formlario,ejemplo de una capa de presentación:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_3sG70qBKb4Y/S-DzyOq5MsI/AAAAAAAAAQw/-5hERc4932Y/s1600/capa-presentacion.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_3sG70qBKb4Y/S-DzyOq5MsI/AAAAAAAAAQw/-5hERc4932Y/s320/capa-presentacion.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Una buena regla general para determinar si la capa de presentación está  suficientemente limpia de código es que debería contener una cantidad  mínima de código PHP, la suficiente como para que un diseñador HTML sin  conocimientos de PHP pueda entenderla. Las instrucciones más comunes en  la parte de la vista suelen ser echo, if/else, foreach/endforeach y poco  más. Además, no se deben incluir instrucciones PHP que generen  etiquetas HTML.&amp;nbsp; &lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;b&gt;En la capa de negocio o aplicación o intermedia: &lt;/b&gt;es donde se localiza la lógica del negocio. Esta capa recibe la petición del usuario a través de la capa de presentación y se encarga de darle curso, recurriendo normalmente a los repositorios de información, dicha capa es donde se implementan las reglas del negocio, las validaciones y cálculos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;La capa de acceso a datos: &lt;/b&gt;es la encargada de acceder a los repositorios de información, ejemplo de estas bases de datos.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como se muestra en la figura la relación entre las capas es unidireccional, es decir solo las capas superiores pueden utilizar los servicios que brindan las capas inferiores, aunque los subsistemas que se encuentran en la misma capa si pueden interactuar entre si.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;&amp;nbsp;Otros artículos sobre Patrones&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patron Singleton en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html"&gt;Patrón de diseño Decorator en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-simple-factory-en-php5.html"&gt;Patrón Factory Method en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://desarrolladorsenior.blogspot.com/2010/08/patron-registry-en-php.html"&gt;Patrón Registry en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://desarrolladorsenior.blogspot.de/2010/10/patron-mvc-modelo-vista-controlador-en.html"&gt;Patrón clásico de diseño web MVC Modelo Vista Controlador en PHP &lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;Referencias Bibliográficas&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
[1] Colaboradores de Wikipedia. Programación por capas [en línea]. Wikipedia, La enciclopedia libre, 2010 [fecha de consulta: 6 de marzo del 2010]. Disponible en &amp;lt;&lt;a href="http://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_por_capas&amp;amp;oldid=34731234"&gt;http://es.wikipedia.org/w/index.php?title=Programaci%C3%B3n_por_capas&amp;amp;oldid=34731234&lt;/a&gt;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;</content><link href="http://desarrolladorsenior.blogspot.com/feeds/1730760238893181188/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2010/05/estilo-arquitectonico-capas.html#comment-form" rel="replies" title="1 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/1730760238893181188" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/1730760238893181188" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2010/05/estilo-arquitectonico-capas.html" rel="alternate" title="Estilo arquitectónico capas" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="http://3.bp.blogspot.com/_3sG70qBKb4Y/S-B4Tvian2I/AAAAAAAAAQo/RULX9AqY_w0/s72-c/capas.jpg" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-8112469592640012018</id><published>2009-12-15T03:52:00.005+01:00</published><updated>2011-01-30T14:46:14.029+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP Orientado a Objetos"/><title type="text">Abstraerse de los servicios que proveen las herramientas de abstracción de acceso a Bases de Datos</title><content type="html">Como habíamos visto en nuestro post anterior&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://desarrolladorsenior.blogspot.com/2009/11/pdo-php-data-objects-capa-de.html"&gt;PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Nuestra clase Database que usa internamente el &lt;b&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patrón Singleton&lt;/a&gt;&lt;/b&gt;: crea una instancia de la clase &lt;b&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;PDO&lt;/a&gt;&lt;/b&gt; a través del método &lt;b&gt;getInstance()&lt;/b&gt;, pudiendo así invocar todos los métodos y propiedades de la misma.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;¿Pero que inconveniente tendríamos si quisiéramos cambiar la Capa de Abstracción de acceso a la Bases de Datos para utilizar ADODB en vez de PDO?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Supongamos que desarrollamos todo nuestro sistema invocando las propiedades y métodos que nos provee &lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;&lt;b&gt;PDO&lt;/b&gt;&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Inconvenientes&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Estaríamos &lt;b&gt;atados a una implementación concreta&lt;/b&gt;, con lo que rompemos con una &lt;b&gt;premisa del Diseño Orientado a Objetos&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;blockquote&gt;“No dependas de implementaciones concretas, solo de implementaciones abstractas” &lt;/blockquote&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Tendríamos que &lt;b&gt;re implementar toda nuestra lógica de negocio&lt;/b&gt; donde quiera que hayamos utilizado una propiedad o método pertenecientes a PDO.&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Solución&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Adaptar la clase Database para que se abstraiga de las propiedades y métodos concretos que proveen las herramientas de Abstracción de Acceso a Bases de Datos como &lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;&lt;b&gt;PDO&lt;/b&gt;&lt;/a&gt; y &lt;b&gt;&lt;a href="http://es.wikipedia.org/wiki/ADOdb"&gt;ADODB&lt;/a&gt;&lt;/b&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Nuestra clase Database debe contener todas las operaciones necesarias para interactuar con cualquier base de datos, pero estos métodos no estarán programados desde cero &lt;b&gt;(reutilización de código)&lt;/b&gt;, sino que reutilizan internamente algún servicio (extensión o librería) de abstracción de BD. En este caso utilizaremos &lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;&lt;b&gt;PDO&lt;/b&gt;&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Ejemplo&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;b&gt;database.php&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=8112469592640012018#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=8112469592640012018#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=8112469592640012018#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=8112469592640012018#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;require_once&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'web.config.php'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;*&amp;nbsp;Represents&amp;nbsp;a&amp;nbsp;connection&amp;nbsp;between&amp;nbsp;PHP&amp;nbsp;and&amp;nbsp;a&amp;nbsp;database&amp;nbsp;server&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;final&amp;nbsp;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;Database&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;PDO&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$dns&lt;/span&gt;&amp;nbsp;=&amp;nbsp;DNS;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$username&lt;/span&gt;&amp;nbsp;=&amp;nbsp;USERNAME;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$passwd&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PASSWD;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$options&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$instance&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$constructIsPrivate&lt;/span&gt;&amp;nbsp;=&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;A&amp;nbsp;private&amp;nbsp;constructor;&amp;nbsp;prevents&amp;nbsp;direct&amp;nbsp;creation&amp;nbsp;of&amp;nbsp;object&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;static&amp;nbsp;private&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__construct()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&amp;nbsp;(self::&lt;span class="vars"&gt;$constructIsPrivate&lt;/span&gt;)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trigger_error(&lt;span class="string"&gt;'Call&amp;nbsp;to&amp;nbsp;private&amp;nbsp;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&lt;span class="keyword"&gt;__CLASS__&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="string"&gt;'::__construct()&amp;nbsp;from&amp;nbsp;invalid&amp;nbsp;context'&lt;/span&gt;,&amp;nbsp;E_USER_ERROR);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parent::__construct(self::&lt;span class="vars"&gt;$dns&lt;/span&gt;,&amp;nbsp;self::&lt;span class="vars"&gt;$username&lt;/span&gt;,&amp;nbsp;self::&lt;span class="vars"&gt;$passwd&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;setAttribute(PDO::ATTR_ERRMODE,&amp;nbsp;PDO::ERRMODE_EXCEPTION);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(PDOException&amp;nbsp;&lt;span class="vars"&gt;$e&lt;/span&gt;)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'Connection&amp;nbsp;failed:&amp;nbsp;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&lt;span class="vars"&gt;$e&lt;/span&gt;-&amp;gt;getMessage();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Create&amp;nbsp;a&amp;nbsp;instance&amp;nbsp;of&amp;nbsp;Database&amp;nbsp;class&amp;nbsp;with&amp;nbsp;The&amp;nbsp;singleton&amp;nbsp;method&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;static&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;Database&amp;nbsp;object&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getInstance()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&amp;nbsp;(!isset(self::&lt;span class="vars"&gt;$instance&lt;/span&gt;))&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::&lt;span class="vars"&gt;$constructIsPrivate&lt;/span&gt;&amp;nbsp;=&amp;nbsp;false;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$c&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;__CLASS__&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::&lt;span class="vars"&gt;$instance&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$c&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::&lt;span class="vars"&gt;$constructIsPrivate&lt;/span&gt;&amp;nbsp;=&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;self::&lt;span class="vars"&gt;$instance&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Initiates&amp;nbsp;a&amp;nbsp;transaction&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;beginTransaction()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::beginTransaction();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Commits&amp;nbsp;a&amp;nbsp;transaction&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;commit()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::commit();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Fetch&amp;nbsp;the&amp;nbsp;SQLSTATE&amp;nbsp;associated&amp;nbsp;with&amp;nbsp;the&amp;nbsp;last&amp;nbsp;operation&amp;nbsp;on&amp;nbsp;the&amp;nbsp;database&amp;nbsp;handle&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;string&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;errorCode()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::errorCode();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Fetch&amp;nbsp;extended&amp;nbsp;error&amp;nbsp;information&amp;nbsp;associated&amp;nbsp;with&amp;nbsp;the&amp;nbsp;last&amp;nbsp;operation&amp;nbsp;on&amp;nbsp;the&amp;nbsp;database&amp;nbsp;handle&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;errorInfo()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::errorInfo();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Execute&amp;nbsp;an&amp;nbsp;SQL&amp;nbsp;statement&amp;nbsp;and&amp;nbsp;return&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;affected&amp;nbsp;rows&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string&amp;nbsp;$statement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;int&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;&lt;span class="func"&gt;exec&lt;/span&gt;(&lt;span class="vars"&gt;$statement&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::&lt;span class="func"&gt;exec&lt;/span&gt;(&lt;span class="vars"&gt;$statement&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Return&amp;nbsp;an&amp;nbsp;array&amp;nbsp;of&amp;nbsp;available&amp;nbsp;PDO&amp;nbsp;drivers&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;static&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getAvailableDrivers()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::getAvailableDrivers();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;the&amp;nbsp;ID&amp;nbsp;of&amp;nbsp;the&amp;nbsp;last&amp;nbsp;inserted&amp;nbsp;row&amp;nbsp;or&amp;nbsp;sequence&amp;nbsp;value&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string[optional]&amp;nbsp;$name&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;string&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;lastInsertId(&lt;span class="vars"&gt;$name&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::lastInsertId(&lt;span class="vars"&gt;$name&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Prepares&amp;nbsp;a&amp;nbsp;statement&amp;nbsp;for&amp;nbsp;execution&amp;nbsp;and&amp;nbsp;returns&amp;nbsp;a&amp;nbsp;statement&amp;nbsp;object&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string&amp;nbsp;$statement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;array&amp;nbsp;&amp;nbsp;$driver_options&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;PDOStatement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;prepare(&lt;span class="vars"&gt;$statement&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$driver_options&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;array&lt;/span&gt;()&amp;nbsp;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::prepare(&lt;span class="vars"&gt;$statement&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$driver_options&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Executes&amp;nbsp;an&amp;nbsp;SQL&amp;nbsp;statement,&amp;nbsp;returning&amp;nbsp;a&amp;nbsp;result&amp;nbsp;set&amp;nbsp;as&amp;nbsp;a&amp;nbsp;PDOStatement&amp;nbsp;object&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string&amp;nbsp;$statement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;PDOStatement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;query()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;&amp;nbsp;=&amp;nbsp;func_get_args();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;switch&lt;/span&gt;(func_num_args())&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;1:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::query(&lt;span class="vars"&gt;$args&lt;/span&gt;[0]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;2:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::query(&lt;span class="vars"&gt;$args&lt;/span&gt;[0],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[1]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;3:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::query(&lt;span class="vars"&gt;$args&lt;/span&gt;[0],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[1],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[2]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;4:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::query(&lt;span class="vars"&gt;$args&lt;/span&gt;[0],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[1],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[2],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[3]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Quotes&amp;nbsp;a&amp;nbsp;string&amp;nbsp;for&amp;nbsp;use&amp;nbsp;in&amp;nbsp;a&amp;nbsp;query&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$string&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$parameter_type&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;string&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;quote(&lt;span class="vars"&gt;$string&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$parameter_type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PDO::PARAM_STR&amp;nbsp;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::quote(&lt;span class="vars"&gt;$string&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$parameter_type&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Rolls&amp;nbsp;back&amp;nbsp;a&amp;nbsp;transaction&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;rollBack()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::rollBack();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Set&amp;nbsp;an&amp;nbsp;attribute&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int&amp;nbsp;&amp;nbsp;&amp;nbsp;$attribute&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;$value&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;setAttribute(&lt;span class="vars"&gt;$attribute&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$value&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::setAttribute(&lt;span class="vars"&gt;$attribute&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$value&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Bind&amp;nbsp;a&amp;nbsp;column&amp;nbsp;to&amp;nbsp;a&amp;nbsp;PHP&amp;nbsp;variable&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$column&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$param&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;&amp;nbsp;&amp;nbsp;$type&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;&amp;nbsp;&amp;nbsp;$maxlen&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed[optional]&amp;nbsp;$driverdata&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;bindColumn(&lt;span class="vars"&gt;$column&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span class="vars"&gt;$param&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null,&amp;nbsp;&lt;span class="vars"&gt;$maxlen&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null,&amp;nbsp;&lt;span class="vars"&gt;$driverdata&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::bindColumn(&lt;span class="vars"&gt;$column&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span class="vars"&gt;$param&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$type&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$maxlen&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$driverdata&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Binds&amp;nbsp;a&amp;nbsp;parameter&amp;nbsp;to&amp;nbsp;the&amp;nbsp;specified&amp;nbsp;variable&amp;nbsp;name&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$parameter&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$variable&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;&amp;nbsp;&amp;nbsp;$data_type&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;&amp;nbsp;&amp;nbsp;$length&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed[optional]&amp;nbsp;$driver_options&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;bindParam(&lt;span class="vars"&gt;$parameter&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span class="vars"&gt;$variable&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$data_type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PDO::PARAM_STR,&amp;nbsp;&lt;span class="vars"&gt;$length&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null,&amp;nbsp;&lt;span class="vars"&gt;$driver_options&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::bindParam(&lt;span class="vars"&gt;$parameter&lt;/span&gt;,&amp;nbsp;&amp;amp;&lt;span class="vars"&gt;$variable&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$data_type&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$length&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$driver_options&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Binds&amp;nbsp;a&amp;nbsp;value&amp;nbsp;to&amp;nbsp;a&amp;nbsp;parameter&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$parameter&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;mixed&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$value&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$data_type&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;bindValue(&lt;span class="vars"&gt;$parameter&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$value&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$data_type&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PDO::PARAM_STR)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::bindValue(&lt;span class="vars"&gt;$parameter&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$value&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$data_type&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Closes&amp;nbsp;the&amp;nbsp;cursor,&amp;nbsp;enabling&amp;nbsp;the&amp;nbsp;statement&amp;nbsp;to&amp;nbsp;be&amp;nbsp;executed&amp;nbsp;again&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;closeCursor()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::closeCursor();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;columns&amp;nbsp;in&amp;nbsp;the&amp;nbsp;result&amp;nbsp;set&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;int&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;columnCount()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::columnCount();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Dump&amp;nbsp;a&amp;nbsp;SQL&amp;nbsp;prepared&amp;nbsp;command&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;debugDumpParams()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::debugDumpParams();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Executes&amp;nbsp;a&amp;nbsp;prepared&amp;nbsp;statement&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;array&amp;nbsp;$input_parameters&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;execute(&lt;span class="vars"&gt;$input_parameters&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;array&lt;/span&gt;())&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::execute(&lt;span class="vars"&gt;$input_parameters&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Fetches&amp;nbsp;the&amp;nbsp;next&amp;nbsp;row&amp;nbsp;from&amp;nbsp;a&amp;nbsp;result&amp;nbsp;set&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$fetch_style&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$cursor_orientation&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$cursor_offset&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;mixed&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;fetch(&lt;span class="vars"&gt;$fetch_style&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PDO::FETCH_BOTH,&amp;nbsp;&lt;span class="vars"&gt;$cursor_orientation&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PDO::FETCH_ORI_NEXT,&amp;nbsp;&lt;span class="vars"&gt;$cursor_offset&lt;/span&gt;&amp;nbsp;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::fetch(&lt;span class="vars"&gt;$fetch_style&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$cursor_orientation&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$cursor_offset&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;an&amp;nbsp;array&amp;nbsp;containing&amp;nbsp;all&amp;nbsp;of&amp;nbsp;the&amp;nbsp;result&amp;nbsp;set&amp;nbsp;rows&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$fetch_style&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$column_index&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;array&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ctor_args&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;fetchAll(&lt;span class="vars"&gt;$fetch_style&lt;/span&gt;&amp;nbsp;=&amp;nbsp;PDO::FETCH_BOTH,&amp;nbsp;&lt;span class="vars"&gt;$column_index&lt;/span&gt;&amp;nbsp;=&amp;nbsp;0&amp;nbsp;,&amp;nbsp;&lt;span class="vars"&gt;$ctor_args&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;array&lt;/span&gt;())&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::fetchAll(&lt;span class="vars"&gt;$fetch_style&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$column_index&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$ctor_args&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;a&amp;nbsp;single&amp;nbsp;column&amp;nbsp;from&amp;nbsp;the&amp;nbsp;next&amp;nbsp;row&amp;nbsp;of&amp;nbsp;a&amp;nbsp;result&amp;nbsp;set&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int[optional]&amp;nbsp;$column_number&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;string&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;fetchColumn(&lt;span class="vars"&gt;$column_number&lt;/span&gt;&amp;nbsp;=&amp;nbsp;0)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::fetchColumn(&lt;span class="vars"&gt;$column_number&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Fetches&amp;nbsp;the&amp;nbsp;next&amp;nbsp;row&amp;nbsp;and&amp;nbsp;returns&amp;nbsp;it&amp;nbsp;as&amp;nbsp;an&amp;nbsp;object&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string[optional]&amp;nbsp;$class_name&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;array&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ctor_args&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;mixed&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;fetchObject(&lt;span class="vars"&gt;$class_name&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="string"&gt;'stdClass'&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$ctor_args&lt;/span&gt;&amp;nbsp;=&amp;nbsp;null)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::fetchObject(&lt;span class="vars"&gt;$class_name&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$ctor_args&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Retrieve&amp;nbsp;a&amp;nbsp;attribute&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int&amp;nbsp;$attribute&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;mixed&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getAttribute(&lt;span class="vars"&gt;$attribute&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::getAttribute(&lt;span class="vars"&gt;$attribute&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;metadata&amp;nbsp;for&amp;nbsp;a&amp;nbsp;column&amp;nbsp;in&amp;nbsp;a&amp;nbsp;result&amp;nbsp;set&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;int&amp;nbsp;$column&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;array&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getColumnMeta(&lt;span class="vars"&gt;$column&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::getColumnMeta(&lt;span class="vars"&gt;$column&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Advances&amp;nbsp;to&amp;nbsp;the&amp;nbsp;next&amp;nbsp;rowset&amp;nbsp;in&amp;nbsp;a&amp;nbsp;multi-rowset&amp;nbsp;statement&amp;nbsp;handle&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;nextRowset()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::nextRowset();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Returns&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;rows&amp;nbsp;affected&amp;nbsp;by&amp;nbsp;the&amp;nbsp;last&amp;nbsp;SQL&amp;nbsp;statement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;int&amp;nbsp;the&amp;nbsp;number&amp;nbsp;of&amp;nbsp;rows.&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;rowCount()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::rowCount();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Set&amp;nbsp;the&amp;nbsp;default&amp;nbsp;fetch&amp;nbsp;mode&amp;nbsp;for&amp;nbsp;this&amp;nbsp;statement&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;$PDO&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;object&amp;nbsp;$object&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;bool&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;setFetchMode()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;&amp;nbsp;=&amp;nbsp;func_get_args();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;switch&lt;/span&gt;(func_num_args())&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;1:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::setFetchMode(&lt;span class="vars"&gt;$args&lt;/span&gt;[0]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;2:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::setFetchMode(&lt;span class="vars"&gt;$args&lt;/span&gt;[0],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[1]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;3:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;parent::setFetchMode(&lt;span class="vars"&gt;$args&lt;/span&gt;[0],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[1],&amp;nbsp;&lt;span class="vars"&gt;$args&lt;/span&gt;[2]);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;break&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Prevent&amp;nbsp;users&amp;nbsp;to&amp;nbsp;clone&amp;nbsp;the&amp;nbsp;instance&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;string&amp;nbsp;trigger_error&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__clone()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trigger_error(&lt;span class="string"&gt;'Clone&amp;nbsp;is&amp;nbsp;not&amp;nbsp;allowed.'&lt;/span&gt;,&amp;nbsp;E_USER_ERROR);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;textarea class="originalCode" style="display: none;"&gt;&amp;lt;?php&amp;lt;br /&amp;gt; require_once 'web.config.php';&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Represents a connection between PHP and a database server&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; final class Database extends PDO&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; static private  $dns = DNS;&amp;lt;br /&amp;gt; static private  $username = USERNAME;&amp;lt;br /&amp;gt; static private  $passwd = PASSWD;&amp;lt;br /&amp;gt; static private  $options;&amp;lt;br /&amp;gt; static private  $instance;&amp;lt;br /&amp;gt; static private  $constructIsPrivate = true;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * A private constructor; prevents direct creation of object&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access static private&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function __construct()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; if (self::$constructIsPrivate) {&amp;lt;br /&amp;gt; trigger_error('Call to private ' . __CLASS__ . &amp;lt;br /&amp;gt; '::__construct() from invalid context', E_USER_ERROR);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; try {&amp;lt;br /&amp;gt; parent::__construct(self::$dns, self::$username, self::$passwd);&amp;lt;br /&amp;gt; $this-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);&amp;lt;br /&amp;gt; } catch (PDOException $e) {&amp;lt;br /&amp;gt; echo 'Connection failed: ' . $e-&amp;gt;getMessage();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Create a instance of Database class with The singleton method&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access static public&amp;lt;br /&amp;gt; * @return Database object&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; static public function getInstance()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; if (!isset(self::$instance))&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; self::$constructIsPrivate = false;&amp;lt;br /&amp;gt; $c = __CLASS__;&amp;lt;br /&amp;gt; self::$instance = new $c;&amp;lt;br /&amp;gt; self::$constructIsPrivate = true;&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; return self::$instance;&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Initiates a transaction&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function beginTransaction()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::beginTransaction();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Commits a transaction &amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function commit()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::commit();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Fetch the SQLSTATE associated with the last operation on the database handle&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return string&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function errorCode()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::errorCode();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Fetch extended error information associated with the last operation on the database handle&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return array&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function errorInfo()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::errorInfo();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Execute an SQL statement and return the number of affected rows&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  string $statement&amp;lt;br /&amp;gt; * @return int&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function exec($statement)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::exec($statement);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Return an array of available PDO drivers&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access static public&amp;lt;br /&amp;gt; * @return array&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; static public function getAvailableDrivers()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::getAvailableDrivers();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Returns the ID of the last inserted row or sequence value &amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  string[optional] $name&amp;lt;br /&amp;gt; * @return string&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function lastInsertId($name = null)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::lastInsertId($name);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Prepares a statement for execution and returns a statement object&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  string $statement&amp;lt;br /&amp;gt; * @param  array  $driver_options&amp;lt;br /&amp;gt; * @return PDOStatement&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function prepare($statement, $driver_options = array() )&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::prepare($statement, $driver_options);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Executes an SQL statement, returning a result set as a PDOStatement object&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  string $statement&amp;lt;br /&amp;gt; * @return PDOStatement&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function query()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; $args = func_get_args();&amp;lt;br /&amp;gt; switch(func_num_args()) {&amp;lt;br /&amp;gt; case 1:&amp;lt;br /&amp;gt; return parent::query($args[0]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; case 2:&amp;lt;br /&amp;gt; return parent::query($args[0], $args[1]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; case 3:&amp;lt;br /&amp;gt; return parent::query($args[0], $args[1], $args[2]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; case 4:&amp;lt;br /&amp;gt; return parent::query($args[0], $args[1], $args[2], $args[3]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Quotes a string for use in a query&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  string        $string&amp;lt;br /&amp;gt; * @param  int[optional] $parameter_type&amp;lt;br /&amp;gt; * @return string&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function quote($string, $parameter_type = PDO::PARAM_STR )&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::quote($string, $parameter_type);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Rolls back a transaction &amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function rollBack()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::rollBack();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Set an attribute&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  int   $attribute&amp;lt;br /&amp;gt; * @param  mixed $value&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function setAttribute($attribute, $value)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::setAttribute($attribute, $value);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Bind a column to a PHP variable &amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  mixed           $column&amp;lt;br /&amp;gt; * @param  mixed           $param&amp;lt;br /&amp;gt; * @param  int[optional]   $type&amp;lt;br /&amp;gt; * @param  int[optional]   $maxlen&amp;lt;br /&amp;gt; * @param  mixed[optional] $driverdata&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function bindColumn($column, &amp;amp;$param, $type = null, $maxlen = null, $driverdata = null)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::bindColumn($column, &amp;amp;$param, $type, $maxlen, $driverdata);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Binds a parameter to the specified variable name&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  mixed           $parameter &amp;lt;br /&amp;gt; * @param  mixed           $variable &amp;lt;br /&amp;gt; * @param  int[optional]   $data_type&amp;lt;br /&amp;gt; * @param  int[optional]   $length&amp;lt;br /&amp;gt; * @param  mixed[optional] $driver_options&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function bindParam($parameter, &amp;amp;$variable, $data_type = PDO::PARAM_STR, $length = null, $driver_options = null)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::bindParam($parameter, &amp;amp;$variable, $data_type, $length, $driver_options);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Binds a value to a parameter&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  mixed         $parameter&amp;lt;br /&amp;gt; * @param  mixed         $value&amp;lt;br /&amp;gt; * @param  int[optional] $data_type&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function bindValue($parameter, $value, $data_type = PDO::PARAM_STR)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::bindValue($parameter, $value, $data_type);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Closes the cursor, enabling the statement to be executed again&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function closeCursor()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::closeCursor();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Returns the number of columns in the result set&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return int&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function columnCount()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::columnCount();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Dump a SQL prepared command&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function debugDumpParams()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::debugDumpParams();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Executes a prepared statement &amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  array $input_parameters&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function execute($input_parameters = array())&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::execute($input_parameters);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Fetches the next row from a result set&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  int[optional] $fetch_style&amp;lt;br /&amp;gt; * @param  int[optional] $cursor_orientation&amp;lt;br /&amp;gt; * @param  int[optional] $cursor_offset&amp;lt;br /&amp;gt; * @return mixed&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function fetch($fetch_style = PDO::FETCH_BOTH, $cursor_orientation = PDO::FETCH_ORI_NEXT, $cursor_offset = 0)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::fetch($fetch_style, $cursor_orientation, $cursor_offset);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Returns an array containing all of the result set rows&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  int[optional] $fetch_style&amp;lt;br /&amp;gt; * @param  int[optional] $column_index&amp;lt;br /&amp;gt; * @param  array         $ctor_args &amp;lt;br /&amp;gt; * @return array&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function fetchAll($fetch_style = PDO::FETCH_BOTH, $column_index = 0 , $ctor_args = array())&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::fetchAll($fetch_style, $column_index, $ctor_args);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Returns a single column from the next row of a result set&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  int[optional] $column_number&amp;lt;br /&amp;gt; * @return string&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function fetchColumn($column_number = 0)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::fetchColumn($column_number);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Fetches the next row and returns it as an object&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  string[optional] $class_name&amp;lt;br /&amp;gt; * @param  array            $ctor_args&amp;lt;br /&amp;gt; * @return mixed&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function fetchObject($class_name = 'stdClass', $ctor_args = null)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::fetchObject($class_name, $ctor_args);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Retrieve a attribute&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  int $attribute&amp;lt;br /&amp;gt; * @return mixed&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function getAttribute($attribute)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::getAttribute($attribute);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Returns metadata for a column in a result set&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  int $column&amp;lt;br /&amp;gt; * @return array&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function getColumnMeta($column)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::getColumnMeta($column);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Advances to the next rowset in a multi-rowset statement handle&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return bool&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function nextRowset()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::nextRowset();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Returns the number of rows affected by the last SQL statement&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return int the number of rows. &amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function rowCount()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; return parent::rowCount();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Set the default fetch mode for this statement&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @param  $PDO&amp;lt;br /&amp;gt; * @param  object $object &amp;lt;br /&amp;gt; * @return bool &amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function setFetchMode()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; $args = func_get_args();&amp;lt;br /&amp;gt; switch(func_num_args()) {&amp;lt;br /&amp;gt; case 1:&amp;lt;br /&amp;gt; return parent::setFetchMode($args[0]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; case 2:&amp;lt;br /&amp;gt; return parent::setFetchMode($args[0], $args[1]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; case 3:&amp;lt;br /&amp;gt; return parent::setFetchMode($args[0], $args[1], $args[2]);&amp;lt;br /&amp;gt; break;&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Prevent users to clone the instance&amp;lt;br /&amp;gt; *&amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return string trigger_error&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function __clone()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; trigger_error('Clone is not allowed.', E_USER_ERROR);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; ?&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Ventaja&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Si en un futuro, encontramos otra capa de abstracción que se adapte más a nuestro contexto (rendimiento, flexibilidad, simplicidad, etc), podremos reemplazarla, sin que la lógica de nuestra aplicación se vea afectada por el cambio, (nuestra lógica depende de nuestra clase Database, y no concretamente de una capa de abstracción específica).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Artículos Relacionados&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patrón "Singleton" en PHP5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte)&amp;nbsp;&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/11/pdo-php-data-objects-capa-de.html"&gt;PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte) &lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Bibliografía&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Enrique Place, (25 de mayo del 2006). «&lt;a href="http://phpsenior.blogspot.com/2006/05/comentarios-sobre-cual-es-la-mejor.html"&gt;Comentarios sobre: "¿Cual es la mejor capa de abstracción?"&lt;/a&gt;». Consultado el 1 de diciembre de 2009.&lt;/div&gt;</content><link href="http://desarrolladorsenior.blogspot.com/feeds/8112469592640012018/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/12/capas-de-abstraccion.html#comment-form" rel="replies" title="3 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/8112469592640012018" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/8112469592640012018" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/12/capas-de-abstraccion.html" rel="alternate" title="Abstraerse de los servicios que proveen las herramientas de abstracción de acceso a Bases de Datos" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-7732427636297534980</id><published>2009-11-20T07:38:00.008+01:00</published><updated>2011-01-30T14:56:57.192+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="patrones de diseño"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP Orientado a Objetos"/><title type="text">PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)</title><content type="html">&lt;div style="text-align: justify;"&gt;Como crear una Capa de Abstracción de acceso a Bases de Datos utilizando la &lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;extensión PDO&lt;/a&gt; y el &lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patrón de diseño Singleton&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Es decir, crearemos una clase Database que usara internamente &lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;&lt;b&gt;PDO&lt;/b&gt;&lt;/a&gt; y el &lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;&lt;b&gt;Patrón Singleton&lt;/b&gt;&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Ejemplo&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;Database.php&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;require_once&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'web.config.php'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;final&amp;nbsp;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;Database&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$dns&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;DNS;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$username&lt;/span&gt;&amp;nbsp;&amp;nbsp;=&amp;nbsp;USERNAME;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$password&lt;/span&gt;&amp;nbsp;&amp;nbsp;=&amp;nbsp;PASSWORD;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$instance&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__construct()&amp;nbsp;{&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Crea&amp;nbsp;una&amp;nbsp;instancia&amp;nbsp;de&amp;nbsp;la&amp;nbsp;clase&amp;nbsp;PDO&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&amp;nbsp;static&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;object&amp;nbsp;de&amp;nbsp;la&amp;nbsp;clase&amp;nbsp;PDO&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getInstance()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&amp;nbsp;(!isset(self::&lt;span class="vars"&gt;$instance&lt;/span&gt;))&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::&lt;span class="vars"&gt;$instance&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;PDO(self::&lt;span class="vars"&gt;$dns&lt;/span&gt;,&amp;nbsp;self::&lt;span class="vars"&gt;$username&lt;/span&gt;,&amp;nbsp;self::&lt;span class="vars"&gt;$password&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self::&lt;span class="vars"&gt;$instance&lt;/span&gt;-&amp;gt;setAttribute(PDO::ATTR_ERRMODE,&amp;nbsp;PDO::ERRMODE_EXCEPTION);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;self::&lt;span class="vars"&gt;$instance&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Impide&amp;nbsp;que&amp;nbsp;la&amp;nbsp;clase&amp;nbsp;sea&amp;nbsp;clonada&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;string&amp;nbsp;trigger_error&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__clone()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;trigger_error(&lt;span class="string"&gt;'Clone&amp;nbsp;is&amp;nbsp;not&amp;nbsp;allowed.'&lt;/span&gt;,&amp;nbsp;E_USER_ERROR);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;textarea class="originalCode" style="display: none;"&gt;&amp;lt;?php&amp;lt;br /&amp;gt; require_once 'web.config.php';&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; final class Database&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; private static $dns       = DNS;&amp;lt;br /&amp;gt; private static $username  = USERNAME;&amp;lt;br /&amp;gt; private static $password  = PASSWORD;&amp;lt;br /&amp;gt; private static $instance;&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; private function __construct() { }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Crea una instancia de la clase PDO&amp;lt;br /&amp;gt; * &amp;lt;br /&amp;gt; * @access public static&amp;lt;br /&amp;gt; * @return object de la clase PDO&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public static function getInstance()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; if (!isset(self::$instance))&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; self::$instance = new PDO(self::$dns, self::$username, self::$password);&amp;lt;br /&amp;gt; self::$instance-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; return self::$instance;&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /**&amp;lt;br /&amp;gt; * Impide que la clase sea clonada&amp;lt;br /&amp;gt; * &amp;lt;br /&amp;gt; * @access public&amp;lt;br /&amp;gt; * @return string trigger_error&amp;lt;br /&amp;gt; */&amp;lt;br /&amp;gt; public function __clone()&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; trigger_error('Clone is not allowed.', E_USER_ERROR);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; ?&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;web.config.php&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;define(&lt;span class="string"&gt;'DNS'&lt;/span&gt;,&lt;span class="string"&gt;'mysql:dbname=midbname;host=mihost'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;define(&lt;span class="string"&gt;'USERNAME'&lt;/span&gt;,&lt;span class="string"&gt;'miusername'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;define(&lt;span class="string"&gt;'PASSWORD'&lt;/span&gt;,&lt;span class="string"&gt;'mipassword'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;textarea class="originalCode" style="display: none;"&gt;&amp;lt;?php&amp;lt;br /&amp;gt; define('DNS','mysql:dbname=midbname;host=mihost');&amp;lt;br /&amp;gt; define('USERNAME','miusername');&amp;lt;br /&amp;gt; define('PASSWORD','mipassword');&amp;lt;br /&amp;gt; ?&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;test.php&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7732427636297534980#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;/*&amp;nbsp;1.&amp;nbsp;Conexión&amp;nbsp;a&amp;nbsp;la&amp;nbsp;base&amp;nbsp;de&amp;nbsp;datos&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;require_once&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'Database.php'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="vars"&gt;$dbh&lt;/span&gt;&amp;nbsp;=&amp;nbsp;Database::getInstance();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;/*&amp;nbsp;Creación&amp;nbsp;de&amp;nbsp;la&amp;nbsp;base&amp;nbsp;de&amp;nbsp;datos&amp;nbsp;noticias&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query('CREATE&amp;nbsp;DATABASE&amp;nbsp;`noticias`&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEFAULT&amp;nbsp;CHARACTER&amp;nbsp;SET&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;latin1&amp;nbsp;COLLATE&amp;nbsp;latin1_swedish_ci');&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query(&lt;span class="string"&gt;'USE&amp;nbsp;`noticias`'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;/*&amp;nbsp;Creación&amp;nbsp;la&amp;nbsp;tabla&amp;nbsp;noticias&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query('CREATE&amp;nbsp;TABLE&amp;nbsp;IF&amp;nbsp;NOT&amp;nbsp;EXISTS&amp;nbsp;`noticia`&amp;nbsp;(&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;AUTO_INCREMENT,&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`titulo`&amp;nbsp;varchar(50)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`texto`&amp;nbsp;varchar(500)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;(`id`)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENGINE=InnoDB&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8&amp;nbsp;AUTO_INCREMENT=2');&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;/*&amp;nbsp;Insertando&amp;nbsp;datos&amp;nbsp;en&amp;nbsp;la&amp;nbsp;tabla&amp;nbsp;noticias&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query("INSERT&amp;nbsp;INTO&amp;nbsp;`noticia`&amp;nbsp;(`titulo`,&amp;nbsp;`texto`)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES&amp;nbsp;(&lt;span class="string"&gt;'PHP5&amp;nbsp;'&lt;/span&gt;,&amp;nbsp;&lt;span class="string"&gt;'PHP5&amp;nbsp;y&amp;nbsp;la&amp;nbsp;POO.'&lt;/span&gt;)");&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;/*&amp;nbsp;2.&amp;nbsp;Enviar&amp;nbsp;la&amp;nbsp;instrucción&amp;nbsp;SQL&amp;nbsp;a&amp;nbsp;la&amp;nbsp;base&amp;nbsp;de&amp;nbsp;datos&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="vars"&gt;$resulset&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query('SELECT&amp;nbsp;&amp;nbsp;&amp;nbsp;`titulo`,`texto`&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`noticia`&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;`titulo`');&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;/*&amp;nbsp;3.&amp;nbsp;Obtener&amp;nbsp;y&amp;nbsp;procesar&amp;nbsp;los&amp;nbsp;resultados&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="vars"&gt;$noticia&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="vars"&gt;$resulset&lt;/span&gt;-&amp;gt;fetchObject();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$noticia&lt;/span&gt;-&amp;gt;titulo;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$noticia&lt;/span&gt;-&amp;gt;texto;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;textarea class="originalCode" style="display: none;"&gt;&amp;lt;?php&amp;lt;br /&amp;gt; /* 1. Conexión a la base de datos */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; require_once 'Database.php';&amp;lt;br /&amp;gt; $dbh = Database::getInstance();&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* Creación de la base de datos noticias */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dbh-&amp;gt;query('CREATE DATABASE `noticias`&amp;lt;br /&amp;gt; DEFAULT CHARACTER SET&amp;lt;br /&amp;gt; latin1 COLLATE latin1_swedish_ci');&amp;lt;br /&amp;gt; $dbh-&amp;gt;query('USE `noticias`');&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* Creación la tabla noticias */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dbh-&amp;gt;query('CREATE TABLE IF NOT EXISTS `noticia` (&amp;lt;br /&amp;gt; `id` int(11) NOT NULL AUTO_INCREMENT,&amp;lt;br /&amp;gt; `titulo` varchar(50) NOT NULL,&amp;lt;br /&amp;gt; `texto` varchar(500) NOT NULL,&amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; )&amp;lt;br /&amp;gt; ENGINE=InnoDB&amp;lt;br /&amp;gt; DEFAULT CHARSET=utf8 AUTO_INCREMENT=2');&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* Insertando datos en la tabla noticias */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dbh-&amp;gt;query("INSERT INTO `noticia` (`titulo`, `texto`)&amp;lt;br /&amp;gt; VALUES ('PHP5 ', 'PHP5 y la POO.')");&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* 2. Enviar la instrucción SQL a la base de datos */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $resulset = $dbh-&amp;gt;query('SELECT   `titulo`,`texto` &amp;lt;br /&amp;gt; FROM     `noticia`&amp;lt;br /&amp;gt; ORDER BY `titulo`');&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* 3. Obtener y procesar los resultados */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $noticia = $resulset-&amp;gt;fetchObject();&amp;lt;br /&amp;gt; echo $noticia-&amp;gt;titulo;&amp;lt;br /&amp;gt; echo $noticia-&amp;gt;texto;&amp;lt;br /&amp;gt; ?&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: large;"&gt;&lt;b&gt;Artículos relacionados&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patrón "Singleton" en PHP5&amp;nbsp;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;</content><link href="http://desarrolladorsenior.blogspot.com/feeds/7732427636297534980/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/11/pdo-php-data-objects-capa-de.html#comment-form" rel="replies" title="1 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/7732427636297534980" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/7732427636297534980" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/11/pdo-php-data-objects-capa-de.html" rel="alternate" title="PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-9209377268898442211</id><published>2009-10-07T19:45:00.005+02:00</published><updated>2011-01-29T16:04:43.463+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PHP Orientado a Objetos"/><title type="text">PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte)</title><content type="html">&lt;div style="text-align: justify;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3D6z9z4BCSxaGcLlPplkQ4lKPJq9HHZj7gX8GsCNiNvif3-8gtFcuA0nvivmfnpBwOfY0dvKl1Jo-pqKKAztlev3IB6k83ib2JShyphenhyphenLXDuXXAWUM2abUtE_6BxO4FSbXuHQOdKWW0dRFXL/s1600-h/PDO.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5389972202693542850" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3D6z9z4BCSxaGcLlPplkQ4lKPJq9HHZj7gX8GsCNiNvif3-8gtFcuA0nvivmfnpBwOfY0dvKl1Jo-pqKKAztlev3IB6k83ib2JShyphenhyphenLXDuXXAWUM2abUtE_6BxO4FSbXuHQOdKWW0dRFXL/s200/PDO.jpg" style="cursor: pointer; float: left; height: 158px; margin: 0pt 10px 10px 0pt; width: 200px;" /&gt;&lt;/a&gt;&lt;a href="http://us2.php.net/pdo"&gt;PDO&lt;/a&gt; &lt;b&gt;(PHP Data Objects)&lt;/b&gt; es una extensión nativa de PHP5, consiste en una interface uniforme para acceder a &lt;a href="http://us2.php.net/manual/en/pdo.drivers.php"&gt;varias bases de datos&lt;/a&gt;. &lt;a href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html"&gt;&lt;b&gt;PDO&lt;/b&gt;&lt;/a&gt; provee una capa de abstracción de acceso a bases de datos (BD), que permite al desarrollador abstraerse de la BD de una aplicación. Así, si en alguna fase de desarrollo del proyecto se necesita cambiar de BD,  esto no afectaría la lógica de la aplicación.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Actualmente los siguientes drivers implementan la Interface PDO:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Nombre del Driver        ---------  Base de Datos soportadas&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-dblib.php"&gt;PDO_DBLIB&lt;/a&gt;                     ------------------  FreeTDS / Microsoft SQL Server / Sybase&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-firebird.php"&gt;PDO_FIREBIRD&lt;/a&gt;              -------------- Firebird/Interbase 6&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-ibm.php"&gt;PDO_IBM&lt;/a&gt;                                                   ---------------------  IBM DB2&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-informix.php"&gt;PDO_INFORMIX&lt;/a&gt;                         -------------  IBM Informix Dynamic Server&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-mysql.php"&gt;PDO_MYSQL&lt;/a&gt;                                       ----------------- MySQL 3.x/4.x/5.x&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-oci.php"&gt;PDO_OCI&lt;/a&gt;                          ---------------------- Oracle Call Interface&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-odbc.php"&gt;PDO_ODBC&lt;/a&gt;                                             ------------------- ODBC v3 (IBM DB2, unixODBC and win32 ODBC)&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-pgsql.php"&gt;PDO_PGSQL&lt;/a&gt;                                         ------------------ PostgreSQL&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-sqlite.php"&gt;PDO_SQLITE&lt;/a&gt;                  ----------------- SQLite 3 and SQLite 2&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/ref.pdo-4d.php"&gt;PDO_4D&lt;/a&gt;                           ---------------------- 4D&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Acceso a bases de datos en PHP5 con PDO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La extensión &lt;a href="http://us2.php.net/pdo"&gt;php_pdo&lt;/a&gt; para el trabajo con bases de datos esta compuesta por tres clases:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/class.pdo.php" style="font-weight: bold;"&gt;PDO:&lt;/a&gt; Representa una conexión entre PHP y un servidor de bases de datos.&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/class.pdostatement.php"&gt;&lt;span style="font-weight: bold;"&gt;PDOStatement:&lt;/span&gt;&lt;/a&gt; Representa una instrucción preparada y después que la instrucción es ejecutada, una result set.&lt;br /&gt;
&lt;a href="http://us2.php.net/manual/en/class.pdoexception.php"&gt;&lt;span style="font-weight: bold;"&gt;PDOException:&lt;/span&gt;&lt;/a&gt;   Representa un error lanzado por PDO.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;La clase PDO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Sinopsis&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;&lt;b&gt;2&lt;/b&gt;  &lt;span style="font-weight: bold;"&gt;PDO &lt;/span&gt;&lt;/span&gt;&lt;span style="color: #007700;"&gt;{
&lt;b&gt;3&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-weight: bold;"&gt;__construct&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$dsn&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$username&lt;/span&gt;
&lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$password&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-style: italic;"&gt;$driver_options&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;]]] )
&lt;b&gt;4&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool          &lt;span style="font-weight: bold;"&gt;beginTransaction&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;5&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;         commit&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;6&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-weight: bold;"&gt;        errorCode&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;7&lt;/b&gt;  array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-weight: bold;"&gt;        errorInfo&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;8&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int           &lt;span style="font-weight: bold;"&gt;exec&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$statement&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;9&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed         &lt;span style="font-weight: bold;"&gt;getAttribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$attribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;10&lt;/b&gt;  array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-weight: bold;"&gt;       getAvailableDrivers&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;11&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string       &lt;span style="font-weight: bold;"&gt;lastInsertId&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$name&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;NULL &lt;/span&gt;&lt;span style="color: #007700;"&gt;] )
&lt;b&gt;12&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDOStatement &lt;span style="font-weight: bold;"&gt;prepare&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$statement&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-style: italic;"&gt;$driver_options&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= array() ] )
&lt;b&gt;13&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDOStatement &lt;span style="font-weight: bold;"&gt;query&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$statement&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;14&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-weight: bold;"&gt;      quote&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$string&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$parameter_type&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PARAM_STR &lt;/span&gt;&lt;span style="color: #007700;"&gt;] )
&lt;b&gt;15&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;        rollBack&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;16&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;        setAttribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$attribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$value&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;17&lt;/b&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Métodos&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.begintransaction.php"&gt;PDO::beginTransaction&lt;/a&gt; — Inicializa una transacción.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.commit.php"&gt;PDO::commit&lt;/a&gt; —                  Commits una transacción.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.construct.php"&gt;PDO::__construct&lt;/a&gt; — Crea una instancia PDO que representa una conexión a una base de datos.&lt;/li&gt;
&lt;li&gt; &lt;a href="http://us2.php.net/manual/en/pdo.errorcode.php"&gt;PDO::errorCode&lt;/a&gt; — Recupera el SQLSTATE asociado con la última operación en la base de datos.&lt;/li&gt;
&lt;li&gt; &lt;a href="http://us2.php.net/manual/en/pdo.errorinfo.php"&gt;PDO::errorInfo&lt;/a&gt; — Recupera  información extendida del error asociado con la ultima operación en la base de datos.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.exec.php"&gt;PDO::exec&lt;/a&gt; — Ejecuta una instrucción SQL y retorna el número de filas afectadas.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.getattribute.php"&gt;PDO::getAttribute&lt;/a&gt; — Recupera un atributo de conexión a base de dato.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.getavailabledrivers.php"&gt;PDO::getAvailableDrivers&lt;/a&gt; — Retorna un array (arreglo) de los drivers disponibles en la extensión PDO.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.lastinsertid.php"&gt;PDO::lastInsertId&lt;/a&gt; — Retorna el ID (identificador) de la última fila insertada o secuencia de valores.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.prepare.php"&gt;PDO::prepare&lt;/a&gt; — Prepara una instrucción para ejecución y retorna un  objeto de tipo PDOStatement.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.query.php"&gt;PDO::query&lt;/a&gt; — Ejecuta una instrucción SQL, retornando un resul set como un objeto de tipo PDOStatement.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.quote.php"&gt;PDO::quote&lt;/a&gt; — Quotes (Pone entre comillas simples un string) para uso en una query (consulta).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.rollback.php"&gt;PDO::rollBack&lt;/a&gt; — Rolls back una transacción.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdo.setattribute.php"&gt;PDO::setAttribute&lt;/a&gt; — Modifica un atributo.&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;La clase PDOStatement&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;Sinopsis&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;&lt;b&gt;2&lt;/b&gt;  PDOStatement &lt;/span&gt;&lt;span style="color: #007700;"&gt;implements &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Traversable &lt;/span&gt;&lt;span style="color: #007700;"&gt;{
&lt;b&gt;3&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;   bindColumn&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$column&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;/span&gt;&lt;span style="color: #007700;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #0000bb; font-style: italic;"&gt;$param &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$type&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$maxlen&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$driverdata&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;]]] )
&lt;b&gt;4&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;   bindParam&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$parameter&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;/span&gt;&lt;span style="color: #007700;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-style: italic;"&gt;$variable&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$data_type&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$length&lt;/span&gt;
&lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$driver_options&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;]]] )
&lt;b&gt;5&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;   bindValue&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$parameter&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$value&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$data_type&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;] )
&lt;b&gt;6&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool   &lt;span style="font-weight: bold;"&gt; closeCursor&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;7&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-weight: bold;"&gt;    columnCount&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;8&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;   debugDumpParams&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;9&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-weight: bold;"&gt; errorCode&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;10&lt;/b&gt; array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-weight: bold;"&gt;  errorInfo&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;11&lt;/b&gt; &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;   execute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-style: italic;"&gt;$input_parameters&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= array() ] )
&lt;b&gt;12&lt;/b&gt; &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-weight: bold;"&gt;  fetch&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$fetch_style&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;FETCH_BOTH
&lt;/span&gt;&lt;span style="color: #007700;"&gt;      [, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$cursor_orientation&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;FETCH_ORI_NEXT &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$cursor_offset&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;0 &lt;/span&gt;&lt;span style="color: #007700;"&gt;]]] )
&lt;b&gt;13&lt;/b&gt; array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-weight: bold;"&gt;  fetchAll&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$fetch_style&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;FETCH_BOTH &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$column_index&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-style: italic;"&gt;$ctor_args&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= array() ]]] )
&lt;b&gt;14&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-weight: bold;"&gt;fetchColumn&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$column_number&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;0 &lt;/span&gt;&lt;span style="color: #007700;"&gt;] )
&lt;b&gt;15&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-weight: bold;"&gt; fetchObject&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string &lt;span style="font-style: italic;"&gt;$class_name&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ctor_args &lt;/span&gt;&lt;span style="color: #007700;"&gt;]] )
&lt;b&gt;16&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-weight: bold;"&gt; getAttribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$attribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;17&lt;/b&gt;  array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;&lt;span style="font-weight: bold;"&gt; getColumnMeta&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$column&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;18&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;  nextRowset&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;19&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int    &lt;span style="font-weight: bold;"&gt;rowCount&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;void &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;20&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;  setAttribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$attribute&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;mixed &lt;span style="font-style: italic;"&gt;$value&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;21&lt;/b&gt;  &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;bool &lt;span style="font-weight: bold;"&gt;  setFetchMode&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;int &lt;span style="font-style: italic;"&gt;$mode&lt;/span&gt; &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;b&gt;22&lt;/b&gt;  }&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;
&lt;/pre&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Métodos&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.bindcolumn.php"&gt;PDOStatement-&amp;gt;bindColumn&lt;/a&gt; — Sustituye el valor de una columna de la base de datos a una variable PHP.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.bindparam.php"&gt;PDOStatement-&amp;gt;bindParam&lt;/a&gt; — Sustituye el valor de un parámetro (argumento), a el nombre de variable especificada.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.bindvalue.php"&gt;PDOStatement-&amp;gt;bindValue&lt;/a&gt; — Sustituye un valor como parámetro.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.closecursor.php"&gt;PDOStatement-&amp;gt;closeCursor&lt;/a&gt; — Cierra el cursor, habilitando la instrucción a ser ejecutada otra vez.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.columncount.php"&gt;PDOStatement-&amp;gt;columnCount&lt;/a&gt; — Retorna el numero de columnas en el result set.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.debugdumpparams.php"&gt;PDOStatement-&amp;gt;debugDumpParams&lt;/a&gt; — Dump un commando SQL preparado.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.errorcode.php"&gt;PDOStatement-&amp;gt;errorCode&lt;/a&gt; — Recupera el SQLSTATE asociado con la última operación realizada en la base de datos.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.errorinfo.php"&gt;PDOStatement-&amp;gt;errorInfo&lt;/a&gt; — Recupera información de error extendida asociada con la ultima operación realizada en la base de datos.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.execute.php"&gt;PDOStatement-&amp;gt;execute&lt;/a&gt; — Ejecuta una instrucción preparada.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.fetch.php"&gt;PDOStatement-&amp;gt;fetch&lt;/a&gt; — Recupera la siguiente fila de una result set.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.fetchall.php"&gt;PDOStatement-&amp;gt;fetchAll&lt;/a&gt; — Retorna un array conteniendo todas las filas del resul set.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.fetchcolumn.php"&gt;PDOStatement-&amp;gt;fetchColumn&lt;/a&gt; — Retorna una única columna de la siguiente fila de un result set.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.fetchobject.php"&gt;PDOStatement-&amp;gt;fetchObject&lt;/a&gt; — Recupera la siguiente fila y la retorna como un objeto.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.getattribute.php"&gt;PDOStatement-&amp;gt;getAttribute&lt;/a&gt; — Recupera una atributo.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.getcolumnmeta.php"&gt;PDOStatement-&amp;gt;getColumnMeta&lt;/a&gt; — Retorna metadatos de una columna en un resul set.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.nextrowset.php"&gt;PDOStatement-&amp;gt;nextRowset&lt;/a&gt; — Avanza a la siguiente Rowset en un multi-rowset.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.rowcount.php"&gt;PDOStatement-&amp;gt;rowCount&lt;/a&gt; — Retorna el numero de filas afectadas por la última instrucción SQL.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.setattribute.php"&gt;PDOStatement-&amp;gt;setAttribute&lt;/a&gt; — Modifica un atributo.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://us2.php.net/manual/en/pdostatement.setfetchmode.php"&gt;PDOStatement-&amp;gt;setFetchMode&lt;/a&gt; — Modifica el valor por defecto para recuperar datos de la base de datos para la instrucción actual.&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Los pasos básicos para interactuar con una base de datos desde PHP son los siguientes:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;1.&lt;/span&gt;    Conectar con el servidor de bases de datos.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;2.&lt;/span&gt;    Enviar la instrucción SQL a la base de datos.&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;3&lt;/span&gt;.    Obtener y procesar los resultados.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;A continuación vemos los métodos concretos con los que realizaremos estas operaciones:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;1.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; Conectar con el servidor de bases de datos (Crear el objeto PDO):&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Descripción&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;__construct &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $dsn &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $username &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $password &lt;/span&gt;&lt;span style="color: #007700;"&gt;[, array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$driver_options &lt;/span&gt;&lt;span style="color: #007700;"&gt;]]] )
&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Lista de parámetros&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
DNS: (Data Source Name), contiene la información requerida para conectarse a la base de datos.&lt;br /&gt;
username: El nombre de usuario. Este parámetro es opcional para algunos PDO drivers .&lt;br /&gt;
password: La contraseña. Este parámetro es opcional para algunos PDO drivers.&lt;br /&gt;
driver_options: Una llave=&amp;gt;valor del arreglo de opciones con driver de conexión especifico.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Valores retornados&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En caso de éxito retorna un objeto PDO.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Errores/Excepciones&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;PDO::__construct()&lt;/span&gt; dispara un PDOException si el intento de conexión a la base de datos falla.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;2.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;    Enviar la instrucción SQL a la base de datos:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Descripción&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;PDOStatement PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;query &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $statement &lt;/span&gt;&lt;span style="color: #007700;"&gt;)

&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDOStatement PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;query &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $statement &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;
int $PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;FETCH_COLUMN &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;
int $colno &lt;/span&gt;&lt;span style="color: #007700;"&gt;)

&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDOStatement PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;query &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $statement &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;
int $PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;FETCH_CLASS&lt;/span&gt;&lt;span style="color: #007700;"&gt;,
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;  string $classname &lt;/span&gt;&lt;span style="color: #007700;"&gt;,
array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ctorargs &lt;/span&gt;&lt;span style="color: #007700;"&gt;)

&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;PDOStatement PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;query &lt;/span&gt;&lt;span style="color: #007700;"&gt;( &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $statement &lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;
int $PDO&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;FETCH_INTO &lt;/span&gt;&lt;span style="color: #007700;"&gt;,
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;object $object &lt;/span&gt;&lt;span style="color: #007700;"&gt;)
&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Lista de parámetros&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;Instrucción SQL.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
&lt;br /&gt;
Valores retornados&lt;br /&gt;
&lt;br /&gt;
PDO::query() &lt;/span&gt;retorna un objeto PDOStatement. &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;3&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.    Obtener y procesar los resultados.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Descripción&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;mixed PDOStatement&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;fetchObject &lt;/span&gt;&lt;span style="color: #007700;"&gt;([ &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;string $class_name &lt;/span&gt;&lt;span style="color: #007700;"&gt;
[, array &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$ctor_args &lt;/span&gt;&lt;span style="color: #007700;"&gt;]] )&lt;/span&gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Lista de parámetros&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
class_name: Nombre de la clase a crear, por defecto utiliza stdClass.&lt;br /&gt;
ctor_args:     Elementos de este arreglo son pasados al constructor.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Valores retornados&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Retorna una instancia de la clase requerida, con el nombre de las propiedades correspondiente a los nombres de las columnas o false in caso de un error.&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: 180%; font-weight: bold;"&gt;Ejemplo completo&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;&lt;div class="bar"&gt;&lt;div class="tools"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=9209377268898442211#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=9209377268898442211#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=9209377268898442211#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=9209377268898442211#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class="alt"&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="comment"&gt;/*&amp;nbsp;1.&amp;nbsp;Conexión&amp;nbsp;a&amp;nbsp;la&amp;nbsp;base&amp;nbsp;de&amp;nbsp;datos&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="vars"&gt;$dsn&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="string"&gt;'mysql:dbname=noticias&lt;/span&gt;&lt;span class="string"&gt;;host=127.0.0.1'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="vars"&gt;$user&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="string"&gt;'dbuser'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="vars"&gt;$password&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="string"&gt;'dbpass'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;try&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$dbh&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;PDO(&lt;span class="vars"&gt;$dsn&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$user&lt;/span&gt;,&amp;nbsp;&lt;span class="vars"&gt;$password&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch&amp;nbsp;(PDOException&amp;nbsp;&lt;span class="vars"&gt;$e&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'Connection&amp;nbsp;failed:&amp;nbsp;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&lt;span class="vars"&gt;$e&lt;/span&gt;-&amp;gt;getMessage();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="comment"&gt;/*&amp;nbsp;Creación&amp;nbsp;la&amp;nbsp;tabla&amp;nbsp;noticias&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query('CREATE&amp;nbsp;TABLE&amp;nbsp;IF&amp;nbsp;NOT&amp;nbsp;EXISTS&amp;nbsp;`noticia`&amp;nbsp;(&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`id`&amp;nbsp;int(11)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;AUTO_INCREMENT,&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`titulo`&amp;nbsp;varchar(50)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`texto`&amp;nbsp;varchar(500)&amp;nbsp;NOT&amp;nbsp;NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;(`id`)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENGINE=InnoDB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8&amp;nbsp;AUTO_INCREMENT=2');&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="comment"&gt;/*&amp;nbsp;Insertando&amp;nbsp;datos&amp;nbsp;en&amp;nbsp;la&amp;nbsp;tabla&amp;nbsp;noticias&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query("INSERT&amp;nbsp;INTO&amp;nbsp;`noticia`&amp;nbsp;(`titulo`,&amp;nbsp;`texto`)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES&amp;nbsp;(&lt;span class="string"&gt;'PHP5&amp;nbsp;'&lt;/span&gt;,&amp;nbsp;&lt;span class="string"&gt;'PHP5&amp;nbsp;y&amp;nbsp;la&amp;nbsp;POO.'&lt;/span&gt;)");&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="comment"&gt;/*&amp;nbsp;2.&amp;nbsp;Enviar&amp;nbsp;la&amp;nbsp;instrucción&amp;nbsp;SQL&amp;nbsp;a&amp;nbsp;la&amp;nbsp;base&amp;nbsp;de&amp;nbsp;datos&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="vars"&gt;$resulset&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="vars"&gt;$dbh&lt;/span&gt;-&amp;gt;query('SELECT&amp;nbsp;&amp;nbsp;&amp;nbsp;`titulo`,`texto`&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;`noticia`&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;`titulo`');&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="comment"&gt;/*&amp;nbsp;3.&amp;nbsp;Obtener&amp;nbsp;y&amp;nbsp;procesar&amp;nbsp;los&amp;nbsp;resultados&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="vars"&gt;$noticia&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="vars"&gt;$resulset&lt;/span&gt;-&amp;gt;fetchObject();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$noticia&lt;/span&gt;-&amp;gt;titulo;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$noticia&lt;/span&gt;-&amp;gt;texto;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;?&amp;gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;textarea class="originalCode" style="display: none;"&gt;&amp;lt;?php&amp;lt;br /&amp;gt; /* 1. Conexión a la base de datos */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dsn = 'mysql:dbname=dbtest;host=127.0.0.1';&amp;lt;br /&amp;gt; $user = 'dbuser';&amp;lt;br /&amp;gt; $password = 'dbpass';&amp;lt;br /&amp;gt; try&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; $dbh = new PDO($dsn, $user, $password);&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; catch (PDOException $e)&amp;lt;br /&amp;gt; {&amp;lt;br /&amp;gt; echo 'Connection failed: ' . $e-&amp;gt;getMessage();&amp;lt;br /&amp;gt; }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* Creación de la base de datos noticias */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dbh-&amp;gt;query('CREATE DATABASE `noticias` &amp;lt;br /&amp;gt; DEFAULT CHARACTER SET &amp;lt;br /&amp;gt; latin1 COLLATE latin1_swedish_ci');&amp;lt;br /&amp;gt; $dbh-&amp;gt;query('USE `noticias`');&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* Creación la tabla noticias */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dbh-&amp;gt;query('CREATE TABLE IF NOT EXISTS `noticia` (&amp;lt;br /&amp;gt; `id` int(11) NOT NULL AUTO_INCREMENT, &amp;lt;br /&amp;gt; `titulo` varchar(50) NOT NULL, &amp;lt;br /&amp;gt; `texto` varchar(500) NOT NULL, &amp;lt;br /&amp;gt; PRIMARY KEY (`id`)&amp;lt;br /&amp;gt; ) &amp;lt;br /&amp;gt; ENGINE=InnoDB  &amp;lt;br /&amp;gt; DEFAULT CHARSET=utf8 AUTO_INCREMENT=2');&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* Insertando datos en la tabla noticias */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $dbh-&amp;gt;query("INSERT INTO `noticia` (`titulo`, `texto`) &amp;lt;br /&amp;gt; VALUES ('PHP5 ', 'PHP5 y la POO.')");&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* 2. Enviar la instrucción SQL a la base de datos */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $resulset = $dbh-&amp;gt;query('SELECT   `titulo`,`texto` &amp;lt;br /&amp;gt; FROM     `noticia` &amp;lt;br /&amp;gt; ORDER BY `titulo`');&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; /* 3. Obtener y procesar los resultados */&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; $noticia = $resulset-&amp;gt;fetchObject();&amp;lt;br /&amp;gt; echo $noticia-&amp;gt;titulo;&amp;lt;br /&amp;gt; echo $noticia-&amp;gt;texto;&amp;lt;br /&amp;gt; ?&amp;gt;&lt;/textarea&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Conclusión&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;PDO cumple con una premisa del diseño Orientado a Objetos:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;“No dependas de implementaciones concretas, solo de implementaciones abstractas”[1]&lt;br /&gt;
&lt;br /&gt;
&lt;/blockquote&gt;PDO es una implementación abstracta, un paso a mejorar el performance de nuestras aplicaciones con desarrollos más portables y escalables.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Artículos relacionados&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/11/pdo-php-data-objects-capa-de.html"&gt;PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos utilizando el Patrón de diseño Singleton (Segunda parte)&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Referencias Bibliográficas&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
[1] Enrique Place, (mayo 25, 2006). «&lt;a href="http://phpsenior.blogspot.com/2006/05/comentarios-sobre-cual-es-la-mejor.html"&gt;Comentarios sobre: "¿Cual es la mejor capa de abstracción?"&lt;/a&gt;». Consultado el 1 de octubre del 2009.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-large;"&gt;&lt;b&gt;Bibliografía&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Colaboradores de Wikipedia. &lt;i&gt;Capa de abstracción&lt;/i&gt; [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 17 de julio del 2009]. Disponible en &amp;lt;&lt;a class="external free" href="http://es.wikipedia.org/w/index.php?title=Capa_de_abstracci%C3%B3n&amp;amp;oldid=28148126" rel="nofollow"&gt;http://es.wikipedia.org/w/index.php?title=Capa_de_abstracci%C3%B3n&amp;amp;oldid=28148126&lt;/a&gt;&amp;gt;.</content><link href="http://desarrolladorsenior.blogspot.com/feeds/9209377268898442211/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html#comment-form" rel="replies" title="2 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/9209377268898442211" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/9209377268898442211" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/10/pdo-php-data-objects-es-una-extension.html" rel="alternate" title="PDO (PHP Data Objects). Capa de Abstracción de acceso a Bases de Datos (Primera parte)" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3D6z9z4BCSxaGcLlPplkQ4lKPJq9HHZj7gX8GsCNiNvif3-8gtFcuA0nvivmfnpBwOfY0dvKl1Jo-pqKKAztlev3IB6k83ib2JShyphenhyphenLXDuXXAWUM2abUtE_6BxO4FSbXuHQOdKWW0dRFXL/s72-c/PDO.jpg" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-2647919023929892898</id><published>2009-09-13T04:16:00.016+02:00</published><updated>2012-12-09T18:23:41.667+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="patrones de diseño"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP Orientado a Objetos"/><title type="text">Patrón Simple Factory en PHP5</title><content type="html">&lt;div style="text-align: justify;"&gt;
&lt;span style="font-size: large;"&gt;Factory Method o Simple Factory&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_3sG70qBKb4Y/S_C42QE0nbI/AAAAAAAAAQ4/PhPXBaVDEb0/s1600/simple-factory.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="113" src="http://4.bp.blogspot.com/_3sG70qBKb4Y/S_C42QE0nbI/AAAAAAAAAQ4/PhPXBaVDEb0/s200/simple-factory.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&amp;nbsp;&lt;span style="font-size: large;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;div style="text-align: justify;"&gt;
"Clase con la responsabilidad de crear objetos de otras clases. No delega en subclases y sus métodos pueden ser estáticos. Puede evolucionar en un &lt;b&gt;Abstract Factory&lt;/b&gt;." &lt;a href="http://msdn.microsoft.com/es-es/library/bb972258.aspx#M11"&gt;[1]&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Clasificación del patrón&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Creacional.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Intención o problema que soluciona&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al cliente la casuística para elegir el subtipo que crear.&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Motivación&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Muchos de ustedes pensaran: ¿Por qué complicarme tanto la vida utilizando un patrón de diseño, en lugar de instanciarla directamente $obj = new MiClase () ?&lt;br /&gt;
&lt;br /&gt;
Hay un escenario principal en el que puede resultar útil.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Flexibilidad en tiempo de ejecución&lt;/b&gt;: A veces es imposible elegir de antemano cuál objeto específico debe ser instanciado, ya que la elección de los objetos a utilizar puede depender de algo en el entorno de ejecución.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Aplicabilidad&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Una clase no puede prever la clase de objetos que debe crear.&lt;/li&gt;
&lt;li&gt;Centralizar la creación de objetos.&lt;/li&gt;
&lt;li&gt;Proveer una interfaz para el cliente, permitiendo crear una familia de objetos sin especificar su clase.&lt;/li&gt;
&lt;/ol&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Estructura&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_3sG70qBKb4Y/S_C42QE0nbI/AAAAAAAAAQ4/PhPXBaVDEb0/s1600/simple-factory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/_3sG70qBKb4Y/S_C42QE0nbI/AAAAAAAAAQ4/PhPXBaVDEb0/s400/simple-factory.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Implementación&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
La clase UserFactory tiene un método estático create, el cual recibe como parámetro un argumento y según el valor de este decide que clase instanciar (usualmente una subclase).&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Código de Ejemplo en PHP5&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos y variantes de fábricas. En este artículo explicaré el Simple Factory.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;interface&lt;/span&gt; FactoryInterface&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;Create(&lt;span class="vars"&gt;$name&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;interface UserInterface {&lt;br /&gt; static public function Create($name);&lt;br /&gt; }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;User&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$name&lt;/span&gt;&amp;nbsp;=&amp;nbsp;NULL;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__construct(&lt;span class="vars"&gt;$name&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;name&amp;nbsp;=&amp;nbsp;&lt;span class="vars"&gt;$name&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getName()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;name;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;hasReadPermission()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;hasModifyPermission()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;false;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;hasDeletePermission()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;false;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;wantsFlashInterface()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;abstract class User {&lt;br /&gt; &lt;br /&gt; protected $name = NULL;&lt;br /&gt; &lt;br /&gt; public function __construct($name)&lt;br /&gt; {&lt;br /&gt; $this-&gt;name = $name;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function getName()&lt;br /&gt; {&lt;br /&gt; return $this-&gt;name;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function hasReadPermission()&lt;br /&gt; {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function hasModifyPermission()&lt;br /&gt; {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function hasDeletePermission()&lt;br /&gt; {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function wantsFlashInterface()&lt;br /&gt; {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;GuestUser&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;User&amp;nbsp;{&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;class GuestUser extends User { }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;CustomerUser&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;User&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;hasModifyPermission()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;class CustomerUser extends User {&lt;br /&gt; function hasModifyPermission()&lt;br /&gt; {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;AdminUser&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;User&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;hasModifyPermission()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;hasDeletePermission()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;true;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;wantsFlashInterface()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;false;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;class AdminUser extends User {&lt;br /&gt; &lt;br /&gt; public function hasModifyPermission()&lt;br /&gt; {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function hasDeletePermission()&lt;br /&gt; {&lt;br /&gt; return true;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public function wantsFlashInterface()&lt;br /&gt; {&lt;br /&gt; return false;&lt;br /&gt; }&lt;br /&gt; }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;UserFactory&amp;nbsp;  &lt;span class="keyword"&gt;implements&amp;nbsp;&lt;/span&gt;FactoryInterface&amp;nbsp; {&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$users&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;array&lt;/span&gt;(&lt;span class="string"&gt;'Arley'&lt;/span&gt;=&amp;gt;&lt;span class="string"&gt;'admin'&lt;/span&gt;,&amp;nbsp;&lt;span class="string"&gt;'Michel'&lt;/span&gt;=&amp;gt;&lt;span class="string"&gt;'guest'&lt;/span&gt;,&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="string"&gt;'Derick'&lt;/span&gt;=&amp;gt;&lt;span class="string"&gt;'customer'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment"&gt;/**&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Función&amp;nbsp;de&amp;nbsp;creación&amp;nbsp;de&amp;nbsp;usuarios.&amp;nbsp;Recibe&amp;nbsp;el&amp;nbsp;tipo&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;de&amp;nbsp;usario&amp;nbsp;a&amp;nbsp;crear&amp;nbsp;y&amp;nbsp;retorna&amp;nbsp;una&amp;nbsp;instancia&amp;nbsp;valida&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@access&amp;nbsp;public&amp;nbsp;static&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;&amp;nbsp;string&amp;nbsp;$name&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;object&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="comment"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;Create(&lt;span class="vars"&gt;$name&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&amp;nbsp;(!isset(self::&lt;span class="vars"&gt;$users&lt;/span&gt;[&lt;span class="vars"&gt;$name&lt;/span&gt;]))&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;Exception(&lt;span class="string"&gt;'El&amp;nbsp;nombre&amp;nbsp;de&amp;nbsp;usuario&amp;nbsp;'&lt;/span&gt;.&lt;span class="vars"&gt;$name&lt;/span&gt;.&lt;span class="string"&gt;'&amp;nbsp;es&amp;nbsp;desconocido'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;switch&lt;/span&gt;&amp;nbsp;(self::&lt;span class="vars"&gt;$users&lt;/span&gt;[&lt;span class="vars"&gt;$name&lt;/span&gt;])&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'guest'&lt;/span&gt;:&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;GuestUser(&lt;span class="vars"&gt;$name&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'customer'&lt;/span&gt;:&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;CustomerUser(&lt;span class="vars"&gt;$name&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'admin'&lt;/span&gt;:&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;AdminUser(&lt;span class="vars"&gt;$name&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;default&lt;/span&gt;:&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;throw&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;Exception(&lt;span class="string"&gt;'Tipo&amp;nbsp;de&amp;nbsp;usario&amp;nbsp;desconocido'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;class UserFactory {&lt;br /&gt; &lt;br /&gt; private static $users = array('Arley'=&gt;'admin', 'Michel'=&gt;'guest',&lt;br /&gt; 'Derick'=&gt;'customer');&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt; * Función de creación de usuarios. Recibe el tipo&lt;br /&gt; * de usario a crear y retorna una instancia valida&lt;br /&gt; *&lt;br /&gt; * @access public static&lt;br /&gt; * @param  string $name&lt;br /&gt; * @return object&lt;br /&gt; */&lt;br /&gt; static public function Create($name)&lt;br /&gt; {&lt;br /&gt; if (!isset(self::$users[$name])) {&lt;br /&gt; throw new Exception('El nombre de usuario '.$name.' es desconocido');&lt;br /&gt; }&lt;br /&gt; switch (self::$users[$name]) {&lt;br /&gt; case 'guest': return new GuestUser($name);&lt;br /&gt; case 'customer': return new CustomerUser($name);&lt;br /&gt; case 'admin': return new AdminUser($name);&lt;br /&gt; default:&lt;br /&gt; throw new Exception('Tipo de usario desconocido');&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=2647919023929892898#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;boolToStr(&lt;span class="vars"&gt;$b&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span class="vars"&gt;$b&lt;/span&gt;&amp;nbsp;==&amp;nbsp;true)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;"Si\n"&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span class="keyword"&gt;else&lt;/span&gt;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;"No\n"&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;displayPermissions(User&amp;nbsp;&lt;span class="vars"&gt;$obj&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&lt;span class="vars"&gt;$obj&lt;/span&gt;-&amp;gt;getName()&amp;nbsp;.&amp;nbsp;&lt;span class="string"&gt;'&amp;nbsp;permiso:&amp;lt;/br&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&lt;span class="string"&gt;'Lectura:&amp;nbsp;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;boolToStr(&lt;span class="vars"&gt;$obj&lt;/span&gt;-&amp;gt;hasReadPermission()).&lt;span class="string"&gt;'&amp;lt;/br&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&lt;span class="string"&gt;'Modificar:&amp;nbsp;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;boolToStr(&lt;span class="vars"&gt;$obj&lt;/span&gt;-&amp;gt;hasModifyPermission()).&lt;span class="string"&gt;'&amp;lt;/br&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&lt;span class="string"&gt;'Escritra:&amp;nbsp;'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;boolToStr(&lt;span class="vars"&gt;$obj&lt;/span&gt;-&amp;gt;hasDeletePermission()).&lt;span class="string"&gt;'&amp;lt;/br&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;displayRequirements(User&amp;nbsp;&lt;span class="vars"&gt;$obj&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span class="vars"&gt;$obj&lt;/span&gt;-&amp;gt;wantsFlashInterface())&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&lt;span class="vars"&gt;$obj&lt;/span&gt;-&amp;gt;getName()&amp;nbsp;.&amp;nbsp;&lt;span class="string"&gt;'&amp;nbsp;requiere&amp;nbsp;Flash&amp;nbsp;&amp;lt;/br&amp;gt;&amp;lt;/br&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="vars"&gt;$logins&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;array&lt;/span&gt;(&lt;span class="string"&gt;'Arley'&lt;/span&gt;,&amp;nbsp;&lt;span class="string"&gt;'Michel'&lt;/span&gt;,&amp;nbsp;&lt;span class="string"&gt;'Derick'&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;foreach&lt;/span&gt;(&lt;span class="vars"&gt;$logins&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;as&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$login&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;displayPermissions(UserFactory::Create(&lt;span class="vars"&gt;$login&lt;/span&gt;));&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;&lt;span class="string"&gt;'&amp;lt;/br&amp;gt;'&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;displayRequirements(UserFactory::Create(&lt;span class="vars"&gt;$login&lt;/span&gt;));&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;function boolToStr($b)&lt;br /&gt; {&lt;br /&gt; if ($b == true) {&lt;br /&gt; return "Si\n";&lt;br /&gt; } else {&lt;br /&gt; return "No\n";&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function displayPermissions(User $obj)&lt;br /&gt; {&lt;br /&gt; print $obj-&gt;getName() . ' permiso:&lt;/br&gt;';&lt;br /&gt; print 'Lectura: ' . boolToStr($obj-&gt;hasReadPermission()).'&lt;/br&gt;';&lt;br /&gt; print 'Modificar: ' . boolToStr($obj-&gt;hasModifyPermission()).'&lt;/br&gt;';&lt;br /&gt; print 'Escritra: ' . boolToStr($obj-&gt;hasDeletePermission()).'&lt;/br&gt;';&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; function displayRequirements(User $obj)&lt;br /&gt; {&lt;br /&gt; if ($obj-&gt;wantsFlashInterface()) {&lt;br /&gt; print $obj-&gt;getName() . ' requiere Flash &lt;/br&gt;&lt;/br&gt;';&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; $logins = array('Arley', 'Michel', 'Derick');&lt;br /&gt; &lt;br /&gt; foreach($logins as $login)&lt;br /&gt; {&lt;br /&gt; displayPermissions(UserFactory::Create($login));&lt;br /&gt; print '&lt;/br&gt;';&lt;br /&gt; displayRequirements(UserFactory::Create($login));&lt;br /&gt; }&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;b&gt;Otros artículos sobre Patrones &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patron Singleton en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html"&gt;Patrón de diseño Decorator en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-simple-factory-en-php5.html"&gt;Patrón Simple Factory en PHP &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2010/08/patron-registry-en-php.html"&gt;Patrón Registry en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.de/2010/10/patron-mvc-modelo-vista-controlador-en.html"&gt;Patrón clásico de diseño web Modelo Vista Controlador (MVC) en PHP&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-weight: bold;"&gt;Referencias bibliográficas&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="http://msdn.microsoft.com/es-es/library/bb972258.aspx#M11"&gt;[1]&lt;/a&gt; León Welicki, «&lt;a href="http://msdn.microsoft.com/es-es/library/bb972258.aspx#M11" rel="nofollow"&gt;Patrones de Fabricación: Fábricas de Objetos&lt;/a&gt;». Consultado el 11 de septiembre de 2009.&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;</content><link href="http://desarrolladorsenior.blogspot.com/feeds/2647919023929892898/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/09/patron-simple-factory-en-php5.html#comment-form" rel="replies" title="5 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/2647919023929892898" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/2647919023929892898" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/09/patron-simple-factory-en-php5.html" rel="alternate" title="Patrón Simple Factory en PHP5" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="http://4.bp.blogspot.com/_3sG70qBKb4Y/S_C42QE0nbI/AAAAAAAAAQ4/PhPXBaVDEb0/s72-c/simple-factory.png" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-7982639883783845486</id><published>2009-09-12T06:44:00.008+02:00</published><updated>2012-12-09T18:22:52.532+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="patrones de diseño"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP Orientado a Objetos"/><title type="text">Patrón de diseño Decorator en PHP5</title><content type="html">&lt;div style="text-align: justify;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7nYFAbE6GVA_2r8bWjthAtxHCAVYZgVSyAtnaSlYERqfeM4deWgAvAZknE0rIlo9vs25qqmrunmQgT3AvUCy1YmeDV769iEO3v07pQvMkfC3Uw5JeUMa1vV_TFpgKZ7vkPPHFuPOuBER/s1600-h/Decorator+Patr%C3%B3n+de+dise%C3%B1o.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Patrón de diseño Decorator en PHP5" border="0" id="BLOGGER_PHOTO_ID_5380438184014853138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7nYFAbE6GVA_2r8bWjthAtxHCAVYZgVSyAtnaSlYERqfeM4deWgAvAZknE0rIlo9vs25qqmrunmQgT3AvUCy1YmeDV769iEO3v07pQvMkfC3Uw5JeUMa1vV_TFpgKZ7vkPPHFuPOuBER/s200/Decorator+Patr%C3%B3n+de+dise%C3%B1o.png" style="cursor: pointer; float: left; height: 159px; margin: 0pt 10px 10px 0pt; width: 200px;" /&gt;&lt;/a&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html"&gt;&lt;b&gt;Patrón Decorator&lt;/b&gt;&lt;/a&gt; responde a la necesidad de agregar funcionalidad a un objeto por medio de la asociación de clases. Es un objeto con el que se puede ejecutar funcionalidades de varias clases a la vez.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
"Esto nos permite no tener que crear sucesivas clases que hereden de la primera incorporando la nueva funcionalidad, sino otras que la implementan y se asocian a la primera." &lt;a href="http://es.wikipedia.org/w/index.php?title=Decorator_%28patr%C3%B3n_de_dise%C3%B1o%29&amp;amp;oldid=27813809"&gt;[1]&lt;/a&gt;&lt;/blockquote&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Clasificación del patrón&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Estructural.&lt;br /&gt;
&lt;span style="font-size: 130%; font-weight: bold;"&gt;&lt;br /&gt;
Intención o problema que soluciona&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;blockquote&gt;
"Supongamos que tenemos una clase existente Ventana y queremos añadirle funcionalidad para que muestre un borde alrededor. Podemos crear una subclase VentanaConBorde que herede de Ventana. Hasta aquí todo bien, pero supongamos que surge la necesidad de crear una ventana que muestre un pequeño botón de ayuda con un signo de interrogación (?) en su parte superior." &lt;a href="http://es.wikipedia.org/w/index.php?title=Decorator_%28patr%C3%B3n_de_dise%C3%B1o%29&amp;amp;oldid=27813809"&gt;[1]&lt;/a&gt;&lt;/blockquote&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Entonces tenemos las siguientes opciones:&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
1. Crear otra subclase de Ventana: VentanaConBotónDeAyuda.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="font-weight: bold;"&gt;Problema:&lt;/span&gt; No cubre la necesidad de tener ventanas con bordes y botón de ayuda a la vez.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
2. Crear una subclase de VentanaConBorde: VentanaConBordeYBotonDeAyuda&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Problema:&lt;/span&gt; No tenemos una ventana con botón de ayuda y sin borde.&lt;br /&gt;
3.  Crear clases para todas las combinaciones posibles de funcionalidades&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="font-weight: bold;"&gt;Problema:&lt;/span&gt; Con este ejemplo tendríamos cuatro clases: Ventana, VentanaConBorde, VentanaConBotonDeAyuda y VentanaConBordeYBotonDeAyuda; con tres funcionalidades tendríamos ocho clases y con cuatro, ¡dieciséis!.&lt;/div&gt;
&lt;a href="http://es.wikipedia.org/w/index.php?title=Decorator_%28patr%C3%B3n_de_dise%C3%B1o%29&amp;amp;oldid=27813809"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Aplicabilidad&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Añadir objetos individuales de forma dinámica y transparente.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Responsabilidades de un objeto pueden ser retiradas.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Cuando la extensión mediante la herencia no es viable.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Hay una necesidad de extender la funcionalidad de una clase, pero no hay razones para extenderlo a través de la herencia.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Hay la necesidad de extender dinámicamente la funcionalidad de un objeto y quizás quitar la funcionalidad extendida. &lt;a href="http://es.wikipedia.org/w/index.php?title=Decorator_%28patr%C3%B3n_de_dise%C3%B1o%29&amp;amp;oldid=27813809"&gt;[1]&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Código de Ejemplo en PHP5&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;div class="tools"&gt;
&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7982639883783845486#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;"&gt;view plain&lt;/a&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7982639883783845486#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;"&gt;copy to clipboard&lt;/a&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7982639883783845486#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;"&gt;print&lt;/a&gt;&lt;a href="http://draft.blogger.com/post-edit.g?blogID=8925209938406741847&amp;amp;postID=7982639883783845486#" onclick="dp.sh.Toolbar.Command('About',this);return false;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol class="dp-c" start="1"&gt;
&lt;li class="alt"&gt;&amp;lt;?php&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;interface&lt;/span&gt;&amp;nbsp;iCoffee&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getBaseCost();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;Coffee&amp;nbsp;&lt;span class="keyword"&gt;implements&lt;/span&gt;&amp;nbsp;iCoffee&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$_baseCost&lt;/span&gt;&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getBaseCost()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;_baseCost;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;BlackCoffee&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;Coffee&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__construct()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;_baseCost&amp;nbsp;=&amp;nbsp;5;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;CoffeeDecorator&amp;nbsp;&lt;span class="keyword"&gt;implements&lt;/span&gt;&amp;nbsp;iCoffee&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$_coffee&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;__construct(iCoffee&amp;nbsp;&lt;span class="vars"&gt;$Coffee&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;_coffee&amp;nbsp;=&amp;nbsp;&lt;span class="vars"&gt;$Coffee&lt;/span&gt;;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;WithCream&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;CoffeeDecorator&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getBaseCost()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;_coffee-&amp;gt;getBaseCost()&amp;nbsp;+&amp;nbsp;1.5;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;WithMilk&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;CoffeeDecorator&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getBaseCost()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;_coffee-&amp;gt;getBaseCost()&amp;nbsp;+&amp;nbsp;4;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="keyword"&gt;class&lt;/span&gt;&amp;nbsp;WithChocolate&amp;nbsp;&lt;span class="keyword"&gt;extends&lt;/span&gt;&amp;nbsp;CoffeeDecorator&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class="keyword"&gt;function&lt;/span&gt;&amp;nbsp;getBaseCost()&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class="vars"&gt;$this&lt;/span&gt;-&amp;gt;_coffee-&amp;gt;getBaseCost()&amp;nbsp;+&amp;nbsp;5;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;}&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class=""&gt;&lt;span class="vars"&gt;$coffee&lt;/span&gt;&amp;nbsp;=&amp;nbsp;&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;WithChocolate(&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;WithMilk(&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;WithCream(&lt;span class="keyword"&gt;new&lt;/span&gt;&amp;nbsp;BlackCoffee())));&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li class="alt"&gt;&lt;span class="func"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="string"&gt;'El&amp;nbsp;precio&amp;nbsp;del&amp;nbsp;cafe&amp;nbsp;es:&amp;nbsp;$'&lt;/span&gt;&amp;nbsp;.&amp;nbsp;&lt;span class="vars"&gt;$coffee&lt;/span&gt;-&amp;gt;getBaseCost();&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;textarea class="originalCode" style="display: none;"&gt;&lt;?php&lt;br /&gt; interface iCoffee {&lt;br /&gt; public function getBaseCost();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; class Coffee implements iCoffee {&lt;br /&gt; protected $_baseCost = 0;&lt;br /&gt; public function getBaseCost()&lt;br /&gt; {&lt;br /&gt; return $this-&gt;_baseCost;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; class BlackCoffee extends Coffee {&lt;br /&gt; public function __construct()&lt;br /&gt; {&lt;br /&gt; $this-&gt;_baseCost = 5;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; abstract class CoffeeDecorator implements iCoffee {&lt;br /&gt; protected $_coffee;&lt;br /&gt; public function __construct(iCoffee $Coffee)&lt;br /&gt; {&lt;br /&gt; $this-&gt;_coffee = $Coffee;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; class WithCream extends CoffeeDecorator {&lt;br /&gt; public function getBaseCost()&lt;br /&gt; {&lt;br /&gt; return $this-&gt;_coffee-&gt;getBaseCost() + 1.5;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; class WithMilk extends CoffeeDecorator {&lt;br /&gt; public function getBaseCost()&lt;br /&gt; {&lt;br /&gt; return $this-&gt;_coffee-&gt;getBaseCost() + 4;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; class WithChocolate extends CoffeeDecorator {&lt;br /&gt; public function getBaseCost()&lt;br /&gt; {&lt;br /&gt; return $this-&gt;_coffee-&gt;getBaseCost() + 5;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; $coffee = new WithChocolate(new WithMilk(new WithCream(new BlackCoffee())));&lt;br /&gt; echo 'El precio del cafe es: $' . $coffee-&gt;getBaseCost();&lt;/textarea&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;b&gt;Otros artículos sobre Patrones &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patron Singleton en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html"&gt;Patrón de diseño Decorator en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-simple-factory-en-php5.html"&gt;Patrón Simple Factory en PHP &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2010/08/patron-registry-en-php.html"&gt;Patrón Registry en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.de/2010/10/patron-mvc-modelo-vista-controlador-en.html"&gt;Patrón clásico de diseño web Modelo Vista Controlador (MVC) en PHP&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Referencias bibliográficas&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
[1] Colaboradores de Wikipedia. Decorator (patrón de diseño) [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 9 de septiembre del 2009]. Disponible en &amp;lt;&lt;a href="http://es.wikipedia.org/w/index.php?title=Decorator_%28patr%C3%B3n_de_dise%C3%B1o%29&amp;amp;oldid=27813809"&gt;http://es.wikipedia.org/w/index.php?title=Decorator_(patr%C3%B3n_de_dise%C3%B1o)&amp;amp;oldid=27813809&lt;/a&gt;&amp;gt;.</content><link href="http://desarrolladorsenior.blogspot.com/feeds/7982639883783845486/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html#comment-form" rel="replies" title="3 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/7982639883783845486" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/7982639883783845486" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html" rel="alternate" title="Patrón de diseño Decorator en PHP5" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7nYFAbE6GVA_2r8bWjthAtxHCAVYZgVSyAtnaSlYERqfeM4deWgAvAZknE0rIlo9vs25qqmrunmQgT3AvUCy1YmeDV769iEO3v07pQvMkfC3Uw5JeUMa1vV_TFpgKZ7vkPPHFuPOuBER/s72-c/Decorator+Patr%C3%B3n+de+dise%C3%B1o.png" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8925209938406741847.post-5128003790255464158</id><published>2009-09-01T10:15:00.006+02:00</published><updated>2012-12-09T18:22:08.941+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="patrones de diseño"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP Orientado a Objetos"/><title type="text">Patrón Singleton en PHP5</title><content type="html">&lt;div style="text-align: left;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlyEF-GPK44FIDqMJmUfJ2pJNRE9ShYiQHq5U6-WHHBmBO5cQFO0j455RuR9nZa1dw5z8Xc0SHBumeXOhmTELmWsbLZuEWgF4asWIcDjfppKE35u8DvltpP2vG_mTMqB91lsakBwtPTIN0/s1600-h/patron-singleton.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Patrón Singleton en PHP5" border="0" id="BLOGGER_PHOTO_ID_5376756728753815906" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlyEF-GPK44FIDqMJmUfJ2pJNRE9ShYiQHq5U6-WHHBmBO5cQFO0j455RuR9nZa1dw5z8Xc0SHBumeXOhmTELmWsbLZuEWgF4asWIcDjfppKE35u8DvltpP2vG_mTMqB91lsakBwtPTIN0/s200/patron-singleton.jpg" style="cursor: pointer; float: left; height: 88px; margin: 0pt 10px 10px 0pt; width: 180px;" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
El &lt;a href="http://es.wikipedia.org/w/index.php?title=Patr%C3%B3n_de_dise%C3%B1o&amp;amp;oldid=29814016" title="Patrón de diseño"&gt;patrón de diseño&lt;/a&gt;"&lt;a href="http://es.wikipedia.org/w/index.php?title=Singleton&amp;amp;oldid=29359982"&gt;Singleton&lt;/a&gt;"  está diseñado para restringir la creación de  objetos pertenecientes a una clase,  forzando a que solo se pueda crear una única instancia, de ahí su nombre &lt;b&gt;Singleton&lt;/b&gt; (&lt;b&gt;instancia única&lt;/b&gt;).&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Un ejemplo de uso de este patrón: supongamos que tenemos una clase  &lt;code&gt;&lt;span style="color: #0000bb;"&gt;"Database"&lt;/span&gt;&lt;/code&gt; y instanciamos dicha clase, la cual nos devuelve un objeto  llamado &lt;span style="font-style: italic;"&gt;&lt;code&gt;&lt;span style="color: #0000bb;"&gt;"$conn"&lt;/span&gt;&lt;/code&gt;&lt;/span&gt;, una vez creada la conexión con la base de datos esta simple instancia será fácilmente accesible a muchos otros objetos, restringiéndose así a la creación de una única instancia la cual será reutilizada una y otra vez.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;span style="font-weight: bold;"&gt;¿Pero como funciona el patrón      de diseño Singleton?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El &lt;b&gt;patrón Singleton&lt;/b&gt; provee una &lt;b&gt;única instancia&lt;/b&gt; global debido a que: si se solicita una instancia de la clase:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-weight: bold;"&gt;a)&lt;/span&gt; La propia clase es la responsable de crear la única instancia, la cual debe  garantizar que no se pueda crear ninguna otra  (interceptando todas las peticiones para crear nuevos objetos) y proporcionando un solo punto de acceso a   ella.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-weight: bold;"&gt;b)&lt;/span&gt; Si no se ha creado anteriormente (o sea, es la primera vez que se    usa esta clase) se crea la instancia.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-weight: bold;"&gt;c)&lt;/span&gt; Si    existe ya anteriormente una instancia (es la segunda o más veces que se usa), se retorna la    existente todas las veces que se solicite.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-weight: bold;"&gt;d)&lt;/span&gt; El constructor de la clase debe declararse como privado para que la clase no  pueda ser instanciada directamente.&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;e)&lt;/span&gt; Adicionalmente en &lt;span style="font-weight: bold;"&gt;PHP5&lt;/span&gt; no se permite que la clase sea clonada con el método &lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;__clone&lt;/span&gt;&lt;span style="color: #007700;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
De esta forma forzamos a que &lt;span style="font-weight: bold;"&gt;no se puedan   crear objetos de forma directa&lt;/span&gt; por la vía del operador &lt;code&gt;&lt;span style="color: #007700;"&gt;"new"&lt;/span&gt;&lt;/code&gt; ejemplo:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;code&gt;&lt;span style="color: red; text-decoration: line-through;"&gt;&lt;span style="color: #0000bb;"&gt;$objeto &lt;/span&gt;&lt;span style="color: #007700;"&gt;= new &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Ejemplo&lt;/span&gt;&lt;span style="color: #007700;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; &lt;br /&gt;
&lt;code&gt;&lt;span style="color: #ff8000;"&gt;//Fatal error:&lt;/span&gt;&lt;/code&gt;&lt;code&gt;&lt;span style="color: #ff8000;"&gt;Call to private Ejemplo::__construct() from invalid context&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Bueno llegados a este punto se pudieran preguntar&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
¿Entonces como creo  la instancia a la clase si el constructor está declarado como privado?&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Directamente a través de un método declarado como público y estático, que será el encargado de crear la instancia de la clase. Ver a continuación:&lt;/div&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;public static function &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;if (!isset(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;self&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;span style="color: #007700;"&gt;)) { &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;$c &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;__CLASS__&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;self&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance &lt;/span&gt;&lt;span style="color: #007700;"&gt;= new &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$c&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;return &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;self&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;} &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
Cuando declararamos atributos de clases o métodos como estáticos, los hacemos accesibles desde afuera del contexto del objeto. Utilizamos entonces el &lt;a href="http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php"&gt;operador de resolución&lt;/a&gt; &lt;code&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;/code&gt; que permite el acceso a los atributos y métodos &lt;a href="http://www.php.net/manual/en/language.oop5.static.php"&gt;estáticos&lt;/a&gt;, veamos un ejemplo:&lt;/div&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;$var &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;NombreClase&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Metodo&lt;/span&gt;&lt;span style="color: #007700;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Funcionamiento del método&lt;/span&gt; &lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
Primeramente accedemos al método:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;$inst1 &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Ejemplo&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podemos ver este método verifica el estado del atributo &lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #007700;"&gt;private static &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;span style="color: #007700;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&amp;nbsp; si  está o no definido, para así tomar la decisión de crear la instancia o retornarla directamente en caso de que ya esté creada.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
Entonces existen 2 posibles casos:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Caso 1:&lt;/span&gt; Si no esta definido el atributo &lt;code&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;/code&gt; se crea por primera vez la instancia, se almacena  en el la referencia y se retorna.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Caso 2:&lt;/span&gt; De estar definido el atributo se retorna la instancia almacenada en el directamente.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Implementacion oficial del Patrón Singleton en PHP5:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Esta es la implementación oficial en PHP5 de este patrón les dejo el vinculo &lt;a href="http://www.php.net/manual/en/language.oop5.patterns.php"&gt;http://www.php.net/manual/en/language.oop5.patterns.php&lt;/a&gt; , lo único que he cambiado por motivos didácticos y de claridad es el nombre del método &lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;singleton&lt;/span&gt;&lt;span style="color: #007700;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; por el de &lt;code&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;  &lt;span style="color: black;"&gt;
&lt;span style="color: #0000bb;"&gt;&lt;span style="color: #007700;"&gt;class &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Ejemplo
&lt;/span&gt;&lt;span style="color: #007700;"&gt;{
&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;/**
*  Contenedor de la Instancia de la Clase
*
*  @access private static
*/
&lt;/span&gt;&lt;span style="color: #007700;"&gt;private static &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;span style="color: #007700;"&gt;;

&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;/**
*  Constructor
*
*  Previene la creación de objetos via $obj = new Ejemplo();
*
*  @access private
*/
&lt;/span&gt;&lt;span style="color: #007700;"&gt;private function &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;__construct&lt;/span&gt;&lt;span style="color: #007700;"&gt;() { }

&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;/**
* El método getInstance
*
* Crea una instancia de la clase Ejemplo
*
* @access public static
* @return object de la clase Ejemplo
*/
&lt;/span&gt;&lt;span style="color: #007700;"&gt;public static function &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;()
{

if (!isset(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;self&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;span style="color: #007700;"&gt;)) {
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$c &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;__CLASS__&lt;/span&gt;&lt;span style="color: #007700;"&gt;;
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;self&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance &lt;/span&gt;&lt;span style="color: #007700;"&gt;= new &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$c&lt;/span&gt;&lt;span style="color: #007700;"&gt;;

}

return &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;self&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$instance&lt;/span&gt;&lt;span style="color: #007700;"&gt;;
}
&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;/**
* El método __clone()
*
* Previene que la clase sea clonada
*
* @access public
*/
&lt;/span&gt;&lt;span style="color: #007700;"&gt;public function &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;__clone&lt;/span&gt;&lt;span style="color: #007700;"&gt;()
{
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;trigger_error&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #dd0000;"&gt;'Clone no se permite.'&lt;/span&gt;&lt;span style="color: #007700;"&gt;, &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;E_USER_ERROR&lt;/span&gt;&lt;span style="color: #007700;"&gt;);

}
}

&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;/**
* Ejemplo de uso
*
* Accedo directamente al método getInstance()
* para que me devuelva una instancia de la clase Ejemplo,
* como dicha instancia no existe este método, la crea.
*
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;*&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #ff8000;"&gt; Nota: si hacemos var_dump sobre un variable esta función
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;* mostrará información estructurada que incluye tipos y valores.
* En el caso de las variables que contienen objetos esta funcion
&lt;/span&gt;&lt;span style="color: #ff8000;"&gt;* devolvería tipo de la variable, en este caso
* object, entre paréntesis (nombre de la clase) y
* un número único #id que representa al objeto creado.&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #ff8000;"&gt;
* Podemos ver que dicho número #id es el mismo para estas
* dos primeros casos.
*/
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$inst1 &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Ejemplo&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;

&lt;pre&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #dd0000;"&gt;&lt;span style="color: #0000bb;"&gt;var_dump&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$inst1&lt;/span&gt;&lt;span style="color: #007700;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #ff8000;"&gt;/**
* En el segundo caso, como existe ya la instancia,
* el método getInstance() lo comprueba y no la crea,
* sino que la retorna directamente.
*/
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$inst2 &lt;/span&gt;&lt;span style="color: #007700;"&gt;= &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Ejemplo&lt;/span&gt;&lt;span style="color: #007700;"&gt;::&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;getInstance&lt;/span&gt;&lt;span style="color: #007700;"&gt;();

&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;pre&gt;&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #dd0000;"&gt;&lt;span style="color: #0000bb;"&gt;var_dump&lt;/span&gt;&lt;span style="color: #007700;"&gt;(&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$inst2&lt;/span&gt;&lt;span style="color: #007700;"&gt;)&lt;span style="font-family: Georgia,serif;"&gt;&lt;span style="font-family: monospace;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;span style="color: black;"&gt;&lt;span style="color: black;"&gt;&lt;span style="color: #ff8000;"&gt;/**
* Si intento crear una instancia directamente utilizando
* el operador new.
*
* Fatal error: Call to private Ejemplo::__construct()
* from invalid context
*/
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;$inst3 &lt;/span&gt;&lt;span style="color: #007700;"&gt;= new &lt;/span&gt;&lt;span style="color: #0000bb;"&gt;Ejemplo&lt;/span&gt;&lt;span style="color: #007700;"&gt;();
&lt;/span&gt;&lt;span style="color: #0000bb;"&gt;  &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;

&lt;/pre&gt;
&lt;span style="font-weight: bold;"&gt;¿Ventajas y usos?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Suponiendo que utilizamos el &lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;&lt;b&gt;Singleton&lt;/b&gt;&lt;/a&gt; en una Base de Datos, esto  posibilita que:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
1.) Que nuestra aplicación web ahorre recursos del servidor.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
2.) Tenemos bien controlado la creación de objetos, al no permitir que nuestra aplicación tenga innumerable y descontroladas conexiones innecesarias abiertas a una misma base de datos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;span style="font-size: small;"&gt;&lt;b&gt;Otros artículos sobre Patrones &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html"&gt;Patron Singleton en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-de-diseno-decorator-en-php5.html"&gt;Patrón de diseño Decorator en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2009/09/patron-simple-factory-en-php5.html"&gt;Patrón Simple Factory en PHP &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.com/2010/08/patron-registry-en-php.html"&gt;Patrón Registry en PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://desarrolladorsenior.blogspot.de/2010/10/patron-mvc-modelo-vista-controlador-en.html"&gt;Patrón clásico de diseño web Modelo Vista Controlador (MVC) en PHP&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="font-size: 100%;"&gt;&lt;span style="font-weight: bold;"&gt;Bibliografía&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Enrique Place, (7 de noviembre del 2006). «&lt;a href="http://phpsenior.blogspot.com/2005/09/patrn-de-diseo-singleton.html"&gt;Patrón de Diseño "Singleton"&lt;/a&gt;». Consultado el 25 de agosto de 2009.&lt;/li&gt;
&lt;li&gt;Colaboradores de Wikipedia. Patrón de diseño [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 17 de septiembre del 2009]. Disponible en &amp;lt;&lt;a href="http://es.wikipedia.org/w/index.php?title=Patr%C3%B3n_de_dise%C3%B1o&amp;amp;oldid=29814016"&gt;http://es.wikipedia.org/w/index.php?title=Patr%C3%B3n_de_dise%C3%B1o&amp;amp;oldid=29814016&lt;/a&gt;&amp;gt;.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Colaboradores de Wikipedia. Singleton [en línea]. Wikipedia, La enciclopedia libre, 2009 [fecha de consulta: 1 de septiembre del 2009]. Disponible en &amp;lt;&lt;a href="http://es.wikipedia.org/w/index.php?title=Singleton&amp;amp;oldid=29359982"&gt;http://es.wikipedia.org/w/index.php?title=Singleton&amp;amp;oldid=29359982&lt;/a&gt;&amp;gt;. &lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;&lt;/ul&gt;
</content><link href="http://desarrolladorsenior.blogspot.com/feeds/5128003790255464158/comments/default" rel="replies" title="Enviar comentarios" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html#comment-form" rel="replies" title="3 comentarios" type="text/html"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/5128003790255464158" rel="edit" type="application/atom+xml"/><link href="http://www.blogger.com/feeds/8925209938406741847/posts/default/5128003790255464158" rel="self" type="application/atom+xml"/><link href="http://desarrolladorsenior.blogspot.com/2009/09/el-patron-de-diseno-singleton-esta.html" rel="alternate" title="Patrón Singleton en PHP5" type="text/html"/><author><name>admin</name><uri>http://www.blogger.com/profile/04536576107102887648</uri><email>noreply@blogger.com</email><gd:image height="16" rel="http://schemas.google.com/g/2005#thumbnail" src="https://img1.blogblog.com/img/b16-rounded.gif" width="16"/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlyEF-GPK44FIDqMJmUfJ2pJNRE9ShYiQHq5U6-WHHBmBO5cQFO0j455RuR9nZa1dw5z8Xc0SHBumeXOhmTELmWsbLZuEWgF4asWIcDjfppKE35u8DvltpP2vG_mTMqB91lsakBwtPTIN0/s72-c/patron-singleton.jpg" width="72"/><thr:total>3</thr:total></entry></feed>