2012-06-27 21 views
7

¿Debo incluir/require_once la clase principal que extiendo en PHP?¿Extender una clase para padres en PHP requiere que se incluya el archivo con la clase?

por ejemplo, tengo una clase llamada Formas

class Shapes { 

} 

Y entonces creado una subclase llamada

require_once('shapes.php'); 

class Circle extends Shapes { 

} 

¿Debo exigir la clase padre cuando yo estoy extendiendo? ¿o debería simplemente extender la subclase a su clase principal aunque estén en la misma carpeta?

+4

¿ha mirado la carga automática? http://www.php.net/manual/en/language.oop5.autoload.php –

Respuesta

13

Debe hacer algo para permitir que PHP vea su definición de clase base antes de que pueda procesar la clase secundaria, de lo contrario, se producirá un error fatal.

Este algo puede ser un manual de require_once del archivo de clase de base, o autoloading (hay otras opciones para la carga automática, pero spl_autoload_register es el que debe utilizar).

Qué enfoque utilizar depende del alcance: cuando se codifica un proyecto de prueba pequeño, la configuración de la carga automática es probablemente exagerada. Pero a medida que la base de código se hace más grande y más grande, la carga automática se vuelve más atractivo debido a que:

  • que puede ocultar la lógica de resolución de archivo de origen complejo (por ejemplo, si tiene un directorio configurable para las clases de base, hay escenarios más avanzados, así)
  • se puede configurar de forma incremental: se pueden utilizar varios cargadores automáticos que se ejecutan como una cadena, y cada módulo independiente de la aplicación puede registrar su cargador automático independiente que coexiste pacíficamente con todos los demás
2

sí, usted tiene para incluirlo si esa clase no está declarada en el mismo archivo.

También había una característica llamada Autoloading Classes con la que puede crear una función como ésta:

function __autoload($class){ 
    require_once('classes/' . $class . '.php'); 
} 

e incluirá automáticamente las clases que no se encuentran en el ámbito existente

También usted también puede leer sobre esta característica: autoload_register

1

También puede usar el compositor para simplificar el proceso.

Hacer composer.json como esto

{ 
... 
    "autoload": { 
     "psr-4": { 
      "": "src/" 
     } 
    }, 
... 
} 

Get compositor https://getcomposer.org/ y ejecutar composer install. Debe cargar script de carga automática del compositor vez como

require_once __DIR__ . '/vendor/autoload.php'; 

Si tiene menos de PHP 5.3.0 vuelva a colocar __DIR__ con dirname(__FILE__).

Y ponga sus archivos en la carpeta src.Por ejemplo, si tiene la clase Acme\Utils\FooBar, entonces debería estar en src/Acme/Utils/FooBar.php.

Cuestiones relacionadas