Documentación offline PHP master

La clase Yaf_Loader

master Ver versión oficial en línea Licencia CC-BY-3.0Descargado el 2026-08-02

En esta página

Introducción#

Yaf_Loader introduce una solución completa de autocarga para Yaf.

La primera vez que se recupera una instancia de la clase Yaf_Application, Yaf_Loader instanciará un singleton, y se registrará a sí mismo con spl_autoload. Se recupera una instancia usando el método Yaf_Loader::getInstance

Yaf_Loader intenta cargar una clase sólo una vez, y si falla, dependiendo de yaf.use_spl_autoload, si esta configuración es "On" Yaf_Loader::autoload devolverá false, y así dará otra oportunidad a otra función de autocarga; si es "Off" (por omisión), Yaf_Loader::autoload devolverá true, y lo que es más importante: emitirá una advertencia muy útil (muy útil para averiguar por qué no se cargó una clase).

[!NOTE] Por favor, mantenga yaf.use_spl_autoload en "Off" a menos que exista una biblioteca que tenga su propio mecanismo de autocarga y sea imposible reescribirlo.

Por defecto, Yaf_Loader asume que todas las bibliotecas (las clases definidas en el script) se almacenan en el directorio de clases global, el cual está definido en php.ini (yaf.library).

Si quiere que Yaf_Loader busque algunas clases (bibliotecas) en el directorio de clases local (el cual está definido en application.ini, y por omisión es application.directory . "/libraray"), debería registrar el prefijo de clases usando el método Yaf_Loader::registerLocalNameSpace

Veamos algunos ejemplos (asumiendo que APPLICATION_PATH es application.directory):

Ejemplo de configuración

// Se asume la siguiente configuración en php.ini:
yaf.library = "/global_dir"

// Se asume la siguiente configuración en application.ini
application.library = APPLICATION_PATH "/library"

Se asume que el siguiente espacio de nombres local está registrado:

Registrar el espacio de nombres local

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
     public function _initLoader($dispatcher) {
          Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
     }
}
?>

Ahora los ejemplos de autocarga:

Ejemplo de carga de clases

class Foo_Bar_Test =>
  // APPLICATION_PATH/library/Foo/Bar/Test.php

class GLO_Name  =>
  // /global_dir/Glo/Name.php

class BarNon_Test
  // /global_dir/Barnon/Test.php

Ejemplo de carga de una clase en el espacio de nombres

class \Foo\Bar\Dummy =>
   // APPLICATION_PATH/library/Foo/Bar/Dummy.php

class \FooBar\Bar\Dummy =>
   // /global_dir/FooBar/Bar/Dummy.php

Se puede observar que todas las carpetas tienen la primera letra en mayúsculas, se pueden ponerlas en minúsculas estableciendo yaf.lowcase_path = On en php.ini

Yaf_Loader también está diseñada para cargar las clases MVC, y la regla es:

Ejemplo de carga de clase MVC

Controller Classes =>
// APPLICATION_PATH/controllers/

Model Classes =>
// APPLICATION_PATH/models/

Plugin Classes =>
// APPLICATION_PATH/plugins/

Yaf identifica un sufijo de clases (por omisión, se puede cambiar el sufijo cambiando la opción de configuración yaf.name_suffix) para decidir si es una clase MVC:

Distinciones de clases MVC

Controller Classes =>
    // ***Controller

Model Classes =>
    // ***Model

Plugin Classes =>
    // ***Plugin

algunos ejemplos:

Ejemplo de carga MVC

class IndexController
    // APPLICATION_PATH/controllers/Index.php

class DataModel =>
   // APPLICATION_PATH/models/Data.php

class DummyPlugin =>
  // APPLICATION_PATH/plugins/Dummy.php

class A_B_TestModel =>
  // APPLICATION_PATH/models/A/B/Test.php

[!NOTE] A partir de 2.1.18, Yaf admite que los Controllers se autocarguen para el lado del scrpt cliente, (lo que significa que la autocarga se desencadena por el script del usuario de php, p.ej., acceder a una propiedad de un Controller estático en Bootstrap o Plugins), aunque el autocargador solamente intenta localizar el controlador bajo la carpeta del módulo predeterminado, que es "APPLICATION_PATH/controllers/".

también, el directorio será afectado por yaf.lowcase_path.

Sinopsis de la clase#

Yaf_Loader

Yaf_Loader

Propiedades

protected

_local_ns

protected

_library

protected

_global_library

static

_instance

Métodos

Propiedades#

_local_ns

_library
Por omisión, este valor es application.directory . "/library", se puede cambiar en application.ini (application.library) o llamando al método Yaf_Loader::setLibraryPath

_global_library

_instance