2011-01-21 10 views
10

Sono abituato a lavorare in linguaggi come C#/Java/Python dove ogni classe avrebbe un proprio file, e per una classe di per vedere altre classi, si farebbe importazione il pacchetto contenente le classi. Come funziona questo in php? La documentazione mostra come creare classi, ma non capisco come tutto si combini in un contesto php. Conosco la dichiarazione di inclusione, che lega semplicemente i file fondamentalmente.php oop - ogni file diverso di classe? pacchetto di importazione? ecc

+3

possibile duplicato di [Importa pacchetto o autoloading per PHP?] (Http://stackoverflow.com/questions/616231/import-package-or-autoloading-for-php) – Gordon

+2

* (tipp) * ricerca di autoloading e convenzioni di codice in PHP – Gordon

+0

Personalmente, trovo molto sensato avere ogni classe in un proprio file ... ma usare un autoloader anziché l'importazione di java –

risposta

15

È possibile utilizzare __autoload

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

Così svolge ogni singola classe nel proprio file nella cartella classi. Quando vuoi usare quella classe, la includerà. Ulteriori informazioni: http://php.net/manual/en/language.oop5.autoload.php

Aggiornamento: Quando ho risposto a questo era pienamente valido. Ora funziona ancora, ma di tenere presente PHP.net da allora dice questo:

spl_autoload_register() fornisce un'alternativa più flessibile per classi caricamento automatico. Per questo motivo, utilizzando __autoload() è scoraggiato e potrebbe essere deprecato o rimosso in futuro.

+2

+1 per includere il link di riferimento –

+2

Anche prendere un guarda: http://www.php.net/manual/en/function.spl-autoload-register.php – Mchl

0

Immaginate che state facendo il vostro oggetto in PHP in un file chiamato myObject.php

<?php 

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

?> 

E in un altro file, si desidera utilizzare l'oggetto (chiamiamolo questo myfile.php). Dovresti includere il tuo oggetto - come questo:

<?php 

    include("myObject.php"); 

    $intance = new myObject(); 

?> 

Abbastanza semplice.

+3

Fino a quando non è necessario gestire un elenco di include che è più lungo del codice. – Mchl

+0

@Mchl: Oh è facile, inserisci gli include nel loro file include e includilo: P – BoltClock

+0

@BoltClock: è stato lì, fatto ciò: D – Mchl

0

In PHP puoi farlo in vari modi, il compilatore non ti limita.

Si può avere 1 classe 1 di file, 5 classi in 1 lima, 1 classe in più file utilizzando include ...

ma di solito è ancora 1 classe 1 file, e se si dispone di molti quelli piccoli - puoi averli anche in 1 cartella.

Quando si esegue 1 class in 1 file con lo stesso nome, è possibile impostare il caricamento automatico della classe in modo che non sia necessario scrivere gli include.

+0

NON puoi avere una divisione di classe su più file. Vedi qui per esempio: http://stackoverflow.com/questions/1957732/can-i-include-code-into-a-php-class/1957830#1957830 – yokmp

4

Il modo più semplice:

  • definire le classi in "classi" di directory applicative
  • init come indicato qui sotto
  • nomi di file nome della classe come il nome della classe in minuscolo con .php suffisso (MyClass = > classi/myclass.php) codice

Init:

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

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

A partire da PHP 5.3.0, si consiglia di utilizzare la funzione spl_autoload_register() poiché __autoload() si dice che sarà deprecato in futuro.

Un modo semplice per utilizzare questa funzione:

1) Luogo ogni file di classe nella cartella 'classi'

2) Eseguire una funzione anonima all'interno spl_autoload_register() che specifica la cartella classe:

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

Ora quando si tenta di utilizzare una classe che non è ancora definita nel codice, controllerà la cartella della classe un'ultima volta prima di darti un errore.

+0

Questo è bello ma è il modo migliore di utilizzarlo quando vuoi il tuo autoloader con il suo nome come descritto in Esempio # 1 qui: http://php.net/manual/en/function.spl-autoload-register.php In questo caso __autoload è sufficiente. –

Problemi correlati