Howto : Classpath en php5

Antes de empezar doy por supuesto que se tienen todos los conocimientos basicos de programacion en php y configuracion basica de servidor apache.

Una de las grandes carencias de php es tener que hacer un require o include continuamente para poder crear las clases, no hay nada parecido a un classpath como en java o python o otros lenguajes oop.

Para solucionarlo se puede hacer a traves de un simple include en el archivo inicial para a partir de ese momento hacer todos los “new ClassName()” que queramos sin tener que recurrir a imports gracias a la funcion de autoload que nos permite importar clases automaticamente si se encuentra disponible.

Para empezar creamos una variable array con las rutas donde tenemos nuestras clases y la haremos accesible a cualquier parte con un define serializandolo con un string separado con comas, tal que asi

var $classfolders = Array(
  "/opt/php/modules/",
  "/opt/php/clases/"
);

define("CLASSPATH",implode($classfolders,","));

Despues en el archivo del cual haremos include, tendremos la funcion autoload con un throw al final para controlar excepciones

function __autoload( $klass ){
 // ruta de los modulos a incluir, trailing slash
 $class_path = explode(",",CLASSPATH);
 foreach ( $class_path as $key => $path ) {
      	   if( file_exists( $file = $path.$klass.".php" ) ){
    		require_once $file;
    		return true;
    	   }
 }
 throw new Exception("La Clase $klass no se encuentra en el classpath");
}

Una vez finalizado todo esto podremos importar las clases que tengamos en las correspondientes carpetas sin tener que importar el archivo, por lo tanto si tuvieramos la clase HelloTest.php en la carpeta “/opt/php/clases/” con el siguiente codigo :

class HelloTest {
      function __construct(){
            echo "Hola Mundo!";
      }
}

Podemos hacer en el archivo “index.php” :

var $classfolders = Array(
          "/opt/php/modules/",
          "/opt/php/clases/"
);

define("CLASSPATH",implode($classfolders,","));

require_once('classpath.php');

$hello = new HelloTest();

Nos saldria en el navegador :

Hola Mundo!

Y hasta aqui un ejemplo de como simular classpath en php para olvidarnos de los aburridos imports y requires en todos lados, solo hay q incluir el archivo classpath.php y tener definida la variable CLASSPATH explicado antes.

Hasta otra

Post a Comment or Leave a Trackback

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*