Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Clase Autoload con Namespaces

Estas en el tema de Clase Autoload con Namespaces en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Me gustaría ver que les parece la siguiente clase que escribí cuando leí sobre namespaces e hice esto como un ejercicio básico de POO. Si ...
  #1 (permalink)  
Antiguo 26/05/2011, 19:18
Jeflopo
Invitado
 
Mensajes: n/a
Puntos:
Clase Autoload con Namespaces

Me gustaría ver que les parece la siguiente clase que escribí cuando leí sobre namespaces e hice esto como un ejercicio básico de POO. Si ven errores o pueden hacer alguna crítica constructiva, se lo agradecería. :)

Traté de hace un autoloader que usara Namespaces. Usando paths independientemente del SO. Usando el SPL Stack para autoloaders. Funcionara con include_path's. Y que fuese algo personalizable o independiente.

Hice la estructura de directorios:
application\
-library\
--core\
---Test.php
--AutoLoader.php

public\
-index.php

Objetivo: La autocarga de la clase Test.php desde index.php con Namespaces que tengan una relación 1:1 con la estructura de directorios.

Sin más el código de los 3 archivos:
(application\library\Autoloader.php)
Código PHP:
Ver original
  1. <?php
  2. namespace Library {
  3.     class AutoLoader {
  4.  
  5.         private $autoloader;
  6.         private $path;
  7.         private $ext;
  8.  
  9.         public function __construct($autoloader = "defaultLoader", $path = null, $ext = ".php") {
  10.  
  11.             if (isset($autoloader)) {
  12.                 $this->setAutoloader($autoloader);
  13.             }
  14.  
  15.             if (isset($path)) {
  16.                 $this->setPath($path);
  17.                 set_include_path($this->getPath() . get_include_path());
  18.             }
  19.            
  20.             if (isset($ext)) {
  21.                 $this->setExt($ext);
  22.             }
  23.             spl_autoload_extensions($this->getExt());
  24.  
  25.             spl_autoload_register(array($this, 'autoloader'));
  26.         }
  27.         // include_path Path Setter & Getter
  28.         public function setPath($param) {
  29.             $this->path = $param;
  30.         }
  31.  
  32.         public function getPath() {
  33.             if (isset($this->path)) {
  34.                 return $this->path;
  35.             }
  36.         }
  37.  
  38.         // SPL Extension Setter & Getter
  39.         public function setExt($param) {
  40.             $this->ext = $param;
  41.         }
  42.  
  43.         public function getExt() {
  44.             if (isset($this->ext)) {
  45.                 return $this->ext;
  46.             }
  47.         }
  48.  
  49.         // Concrete autoloader Setter & Getter
  50.         public function setAutoloader($param) {
  51.             $this->autoloader = $param;
  52.         }
  53.  
  54.         public function getAutoloader() {
  55.             if (isset($this->autoloader)) {
  56.                 return $this->autoloader;
  57.             }
  58.         }
  59.         // Callback function of spl_autoload_register
  60.         public function autoloader($className) {
  61.             $className = str_replace('\\', DIRECTORY_SEPARATOR, $className); // Path now uses DS
  62.             $className = ltrim($className, __NAMESPACE__ . '\\'); // We cut the string to reflect the route that truly maps with the namespace defined in this class with the filepath.
  63.             $this->{$this->autoloader}($className);
  64.         }
  65.  
  66.         public function concreteLoader($className) {
  67.             require_once '\\zf\\ZendFramework-1.11.4\\library\\' . $className . '.php'; // Windows Based Concrete Autoloader (SO DS Dependent) - Ignoring the use of the include_path cause its an absolute path.
  68.         }                                                                               // C:\zf\ZendFramework-1.11.4\library\
  69.         public function defaultLoader($className) {
  70.             require_once $className . '.php'; // Direct require or looking include_path paths.
  71.         }
  72.     }
  73. }
  74. ?>
(application\library\core\Test.php)
Código PHP:
Ver original
  1. <?php
  2. namespace Library\Core {
  3.     class Test {
  4.         public function __construct() {
  5.             echo "La clase " . __CLASS__ . " se ha ejecutado correctamente.";
  6.         }
  7.     }
  8. }
  9. ?>

(public\index.php)
Código PHP:
Ver original
  1. <?php
  2. require '..\Application\Library\AutoLoader.php'; // Cargamos el autoloader
  3. $loader = new Library\AutoLoader();
  4. $test = new Library\Core\test();
  5. ?>

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:20.