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

<channel>
	<title>PHPBSD.net &#187; objetos</title>
	<atom:link href="http://www.phpbsd.net/tag/objetos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpbsd.net</link>
	<description>Blogueando sobre PHP, BSD, SEO, AJAX, Seguridad, Rendimiento... y mucho más</description>
	<lastBuildDate>Thu, 07 Oct 2010 11:57:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Cache en memoria compartida con APC</title>
		<link>http://www.phpbsd.net/2007/05/02/cache-en-memoria-compartida-con-apc/</link>
		<comments>http://www.phpbsd.net/2007/05/02/cache-en-memoria-compartida-con-apc/#comments</comments>
		<pubDate>Wed, 02 May 2007 18:37:23 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[apc]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[memoria-compartida]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/05/02/cache-en-memoria-compartida-con-apc/</guid>
		<description><![CDATA[Como continuación del anterior post voy a explicar brevemente como montar una cache de objetos en memoria compartida usando APC. Esto nos permite disponer de una cache accesible para cualquier proceso Apache que se esté ejecutando en el servidor. Podemos guardar cualquier variable (resultados de queries, páginas html, cualquier tipo de objeto, etc.) y esta [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/04/26/instalacion-del-apc-alternative-php-cache-sobre-freebsd/' rel='bookmark' title='Permanent Link: Instalación del APC (Alternative PHP Cache) sobre FreeBSD'>Instalación del APC (Alternative PHP Cache) sobre FreeBSD</a></li><li><a href='http://www.phpbsd.net/2007/05/16/cache-de-paginas-estaticas-para-php/' rel='bookmark' title='Permanent Link: Cache de páginas estáticas para PHP'>Cache de páginas estáticas para PHP</a></li><li><a href='http://www.phpbsd.net/2006/12/06/optimizacion-del-rendimiento-de-adodb-en-php/' rel='bookmark' title='Permanent Link: Optimización del rendimiento de ADOdb en PHP'>Optimización del rendimiento de ADOdb en PHP</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Como continuación del anterior post voy a explicar brevemente como montar una <strong>cache de objetos en memoria compartida</strong> usando <a target="_blank" href="http://www.php.net/manual/en/ref.apc.php" title="PHP: Alternative PHP Cache - Manual">APC</a>. Esto nos permite disponer de una cache accesible para cualquier proceso Apache que se esté ejecutando en el servidor. Podemos guardar cualquier variable (resultados de queries, páginas html, cualquier tipo de objeto, etc.) y esta se conservará entre las distintas peticiones hasta que la borremos de cache o expire el TTL que queramos.</p>
<p>Una forma rápida de ver su uso es con un ejemplo:</p>
<div class="syntax_hilite">
<div id="php-3">
<div class="php"><span style="color:#0000FF;">$obj</span> = <span style="color:#000000; font-weight:bold;">new</span> Objeto<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
apc_store<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'key'</span>,<a href="http://www.php.net/serialize"><span style="color:#000066;">serialize</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$obj</span><span style="color:#006600; font-weight:bold;">&#41;</span>,<span style="color:#CC66CC;">3600</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<span style="color:#0000FF;">$result</span> = <a href="http://www.php.net/unserialize"><span style="color:#000066;">unserialize</span></a><span style="color:#006600; font-weight:bold;">&#40;</span>apc_fetch<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'key'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;<br />
<a href="http://www.php.net/var_dump"><span style="color:#000066;">var_dump</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$result</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>Usando <a target="_blank" href="http://www.php.net/manual/en/function.apc-store.php" title="PHP: apc_store - Manual">apc_store()</a> guardamos <em>$obj</em> en cache durante una hora. Podemos recuperar o borrar <em>$obj</em> de la cache usando el identificador <em>key</em>. Es necesario realizar serialize/unserialize si guardamos datos como objetos o arrays, para variables simples no es necesario.</p>
<p>Para borrar el anterior objeto de cache:</p>
<div class="syntax_hilite">
<div id="php-4">
<div class="php">apc_delete<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#FF0000;">'key'</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>Para evitar el uso de <em>define</em> el cual es bastante lento disponemos de <a target="_blank" href="http://www.php.net/manual/en/function.apc-define-constants.php" title="PHP: apc_define_constants - Manual">apc_define_constants()</a> y <a target="_blank" href="http://www.php.net/manual/en/function.apc-load-constants.php" title="PHP: apc_load_constants - Manual">apc_load_constants()</a> para guardar y recuperar constantes de cache.</p>
<p>El APC ofrece una interfaz gráfica para ver el uso que hacemos de la cache, que opciones tenemos activas, archivos "compilados", variables almacenadas, etc. a la vez que nos permite borrar todo el contenido de la cache. Podemos obtener la misma información con la función <a target="_blank" href="http://www.php.net/manual/en/function.apc-cache-info.php" title="PHP: apc_cache_info - Manual">apc_cache_info()</a> y para borrar la cache tenemos <a target="_blank" href="http://www.php.net/manual/en/function.apc-clear-cache.php" title="PHP: apc_clear_cache - Manual">apc_clear_cache()</a> aunque la interfaz gráfica no deja de ser interesante.</p>
<p>Un snapshot de ejemplo:</p>
<p><img src="http://www.phpbsd.net/wp-content/images/snapshot_apc.png" alt="APC snapshot" /></p>
<p>Para instalarla en FreeBSD se trata de copiar el archivo <em>/usr/local/share/doc/APC/apc.php</em> en algún lugar dentro de nuestro document root del Apache.</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/04/26/instalacion-del-apc-alternative-php-cache-sobre-freebsd/' rel='bookmark' title='Permanent Link: Instalación del APC (Alternative PHP Cache) sobre FreeBSD'>Instalación del APC (Alternative PHP Cache) sobre FreeBSD</a></li><li><a href='http://www.phpbsd.net/2007/05/16/cache-de-paginas-estaticas-para-php/' rel='bookmark' title='Permanent Link: Cache de páginas estáticas para PHP'>Cache de páginas estáticas para PHP</a></li><li><a href='http://www.phpbsd.net/2006/12/06/optimizacion-del-rendimiento-de-adodb-en-php/' rel='bookmark' title='Permanent Link: Optimización del rendimiento de ADOdb en PHP'>Optimización del rendimiento de ADOdb en PHP</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/05/02/cache-en-memoria-compartida-con-apc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Carga automática de clases en PHP con autoload</title>
		<link>http://www.phpbsd.net/2007/04/25/carga-automatica-de-clases-en-php-con-autoload/</link>
		<comments>http://www.phpbsd.net/2007/04/25/carga-automatica-de-clases-en-php-con-autoload/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 20:24:47 +0000</pubDate>
		<dc:creator>Oriol</dc:creator>
				<category><![CDATA[Artículos]]></category>
		<category><![CDATA[autoload]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.phpbsd.net/2007/04/25/carga-automatica-de-clases-en-php-con-autoload/</guid>
		<description><![CDATA[Una de las técnicas más habituales en el desarrollo de aplicaciones PHP orientadas a objetos es crear un archivo fuente para cada definición de clase. Con esta técnica es necesario hacer require de muchos archivos en el código para cada ejecución. Nuestro fantástico PHP5 nos ofrece la posibilidad de cargar automáticamente las clases que necesita [...]


Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/' rel='bookmark' title='Permanent Link: Instalar clases PEAR en un hosting compartido'>Instalar clases PEAR en un hosting compartido</a></li><li><a href='http://www.phpbsd.net/2007/01/22/sistema-de-no-plantillas-con-php5-para-un-mvc-aka-problemas-con-smarty/' rel='bookmark' title='Permanent Link: Sistema de NO plantillas con PHP5 para un MVC (aka Problemas con Smarty)'>Sistema de NO plantillas con PHP5 para un MVC (aka Problemas con Smarty)</a></li><li><a href='http://www.phpbsd.net/2007/06/18/jugando-con-delicious-desde-php/' rel='bookmark' title='Permanent Link: Jugando con del.icio.us desde PHP'>Jugando con del.icio.us desde PHP</a></li></ul>]]></description>
			<content:encoded><![CDATA[<p>Una de las técnicas más habituales en el desarrollo de aplicaciones PHP orientadas a objetos es crear un archivo fuente para cada definición de clase. Con esta técnica es necesario hacer require de muchos archivos en el código para cada ejecución. Nuestro fantástico PHP5 nos ofrece la posibilidad de cargar automáticamente las clases que necesita bajo demanda definiendo la función <a target="_blank" href="http://www.php.net/manual/en/language.oop5.autoload.php" title="PHP: Autoloading Objects - Manual">__autoload()</a>.</p>
<p>Otra gran ventaja de usar <strong>autoload</strong> es que nos aseguramos de que sólo incluimos las definiciones de las clases que realmente usamos. Es frecuente en la vida de una aplicación que debido a actualizaciones se nos queden requires de clases que ya no usamos o que por ejemplo tengamos la costumbre de hacer todos los requires que va a usar una clase en la cabecera, entonces para ejecutar un sólo método que quizás sólo usa un par de clases estamos cargando clases innecesarias.</p>
<p>A pesar de que normalmente el uso de <strong>autoload</strong> provoca una mejora importante en el rendimiento ya que sólo se cargan las clases que usamos se ha de tener en cuenta que el código que tengamos en la función <em>__autoload()</em> debe ser lo más ligero posible ya que dependiendo del tamaño de la aplicación se va a ejecutar muchísimas veces.</p>
<p>Una función <em>__autoload()</em> de ejemplo podría ser algo como:</p>
<div class="syntax_hilite">
<div id="php-6">
<div class="php"><span style="color:#000000; font-weight:bold;">function</span> __autoload<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$class_name</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; <span style="color:#0000FF;">$file</span> = <span style="color:#FF0000;">'/classes/'</span>.<span style="color:#0000FF;">$class_name</span>.<span style="color:#FF0000;">'.php'</span>;<br />
&nbsp; <span style="color:#616100;">if</span> <span style="color:#006600; font-weight:bold;">&#40;</span><a href="http://www.php.net/file_exists"><span style="color:#000066;">file_exists</span></a><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$file</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#616100;">require_once</span> <span style="color:#0000FF;">$file</span>;<br />
<span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Si tiras de <em>file_exists()</em> y constantemente estás añadiendo y quitando clases quizás te resulta interesante usar <a target="_blank" href="http://www.php.net/manual/en/function.clearstatcache.php" title="PHP: clearstatcache - Manual">clearstatcache()</a> antes para limpiar la cache de estados de archivo.</p>
<p>Como es necesario definir el <strong>autoload</strong> al principio de cada script resulta útil usar la directiva <em>auto_prepend_file</em>, si no tienes acceso a tu PHP.INI puedes añadir lo siguiente en tu .htaccess:</p>
<p><code>php_value auto_prepend_file "funcion_autoload.php"</code></p>
<p>Una última consideración es que en teoría no se pueden lanzar exceptions desde dentro de la función <em>__autoload()</em>, aunque usando <a target="_blank" href="http://www.php.net/manual/en/function.eval.php" title="PHP: eval - Manual">eval()</a> para cargar la definición de la clase exception deseada lo puedes conseguir (en las <a target="_blank" href="http://www.php.net/manual/en/language.oop5.autoload.php" title="PHP: Autoloading Objects - Manual">notas del manual</a> tienes varios ejemplos).</p>


<p>Entradas relacionadas:<ul><li><a href='http://www.phpbsd.net/2007/06/13/instalar-clases-pear-en-un-hosting-compartido/' rel='bookmark' title='Permanent Link: Instalar clases PEAR en un hosting compartido'>Instalar clases PEAR en un hosting compartido</a></li><li><a href='http://www.phpbsd.net/2007/01/22/sistema-de-no-plantillas-con-php5-para-un-mvc-aka-problemas-con-smarty/' rel='bookmark' title='Permanent Link: Sistema de NO plantillas con PHP5 para un MVC (aka Problemas con Smarty)'>Sistema de NO plantillas con PHP5 para un MVC (aka Problemas con Smarty)</a></li><li><a href='http://www.phpbsd.net/2007/06/18/jugando-con-delicious-desde-php/' rel='bookmark' title='Permanent Link: Jugando con del.icio.us desde PHP'>Jugando con del.icio.us desde PHP</a></li></ul></p>]]></content:encoded>
			<wfw:commentRss>http://www.phpbsd.net/2007/04/25/carga-automatica-de-clases-en-php-con-autoload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

