2011-01-21 27 views
10

estoy acostumbrado a trabajar en lenguajes como C#/Java/Python donde cada clase tendría su propio archivo, y para una clasepara ver otras clases, lo haría importación el paquete que contiene esas clases. ¿Cómo funciona esto en php? La documentación muestra cómo crear clases, pero no entiendo cómo encaja todo en un contexto php. Sé de la declaración de inclusión, que simplemente une básicamente los archivos.php oop - cada archivo de clase diferente? importar paquete? etc

+3

posible duplicado de [¿Importar paquete o cargar automáticamente para PHP?] (Http://stackoverflow.com/questions/616231/package-importar-or-autoloading-for-php) – Gordon

+2

* (tipp) * buscar autocarga y convenciones de código en PHP – Gordon

+0

Personalmente, me parece muy sensato tener cada clase en su propio archivo ... pero use un autocargador en lugar de la importación de Java –

Respuesta

15

Puede utilizar __autoload

function __autoload($class_name) { 
    include 'classes/'.$class_name . '.php'; 
} 

Por tanto, coloca cada clase única en su propio archivo en la carpeta de clases. Cuando quiera usar esa clase, la incluirá. Más información: http://php.net/manual/en/language.oop5.autoload.php

Actualización: Cuando respondí esto, era completamente válido. Ahora que todavía funciona, pero hay que tener en cuenta PHP.net ya dice entonces esto:

spl_autoload_register() proporciona una alternativa más flexible para clases de carga automática. Por esta razón, el uso de __autoload() es desaconsejado y puede ser obsoleto o eliminado en el futuro.

+2

1 por incluir el enlace de referencia –

+2

También tomar una mira: http://www.php.net/manual/en/function.spl-autoload-register.php – Mchl

0

Imagínese que usted ha estado haciendo su objeto en PHP en un archivo llamado myObject.php

<?php 

    class myObject 
    { 
    public function __construct() 
    { 
     echo "Hello, World"; 
    } 
    } 

?> 

Y en otro archivo, que le gustaría utilizar el objeto (Llamemos a este myfile.php). Usted tendría que incluir su objeto - como esto:

<?php 

    include("myObject.php"); 

    $intance = new myObject(); 

?> 

bastante simple.

+3

Hasta que necesite administrar una lista de inclusiones que es más larga que su código. – Mchl

+0

@Mchl: Oh, es fácil, coloque las inclusiones en su propio archivo de inclusión e inclúyalo: P – BoltClock

+0

@BoltClock: estado allí, hecho eso: D – Mchl

0

En PHP puede hacerlo de varias formas, el compilador no lo limita.

Usted puede tener 1 clase 1 en el archivo, 5 clases en 1 archivo, 1 clase en varios archivos usando incluye ...

pero por lo general sigue siendo la clase 1 de 1 archivos, y si tiene muchos diminutos pequeños - También puedes tenerlos en 1 carpeta.

Al hacer 1 clase en 1 archivo con el mismo nombre, puede configurar la carga automática de la clase para que no tenga que escribir sus inclusiones.

+0

NO puede tener una clase dividida en varios archivos. Vea aquí por ejemplo: http://stackoverflow.com/questions/1957732/can-i-include-code-into-a-php-class/1957830#1957830 – yokmp

4

La forma más sencilla:

  • definir sus clases en "clases" de directorio de aplicaciones
  • init como se muestra a continuación
  • nombres de archivo Nombre de clase como su nombre de la clase minúscula con .php sufijo (= MiClase > clases/myclass.php) código

Init:

set_include_path ("./classes"); 
spl_autoload_register(); 

//class is automatically loaded from ./classes/myclass.php 
$object_instance = new MyClass(); 
2

A partir de PHP 5.3.0, se recomienda que utilice la función spl_autoload_register() porque se dice que __autoload() está en desuso en algún momento en el futuro.

Una manera fácil de utilizar esta función:

1) Coloque cada archivo de clase en la carpeta 'clases'

2) Ejecutar una función anónima dentro spl_autoload_register() que especifica la carpeta de clase:

spl_autoload_register(function ($class) { 
    include 'classes/' . $class . '.php'; 
}); 

Ahora cuando intenta utilizar una clase que no está definido en el código, sin embargo, se comprobará que la carpeta de clase por última vez antes de darle un error.

+0

Esto es genial, pero esto se usa mejor cuando quieres tu propio autocargador con su propio nombre como se describe en el Ejemplo # 1 aquí: http://php.net/manual/en/function.spl-autoload-register.php En este caso __autoload es suficiente. –

Cuestiones relacionadas