2012-06-27 20 views
7

Devo includere/require_once la classe genitore che sto estendendo in PHP?L'estensione di una classe genitore in PHP richiede il file con la classe inclusa?

per esempio ho una classe denominata Forme

class Shapes { 

} 

E poi ho creato una sottoclasse chiamato

require_once('shapes.php'); 

class Circle extends Shapes { 

} 

Devo richiedere la classe padre quando mi rivolgo? o dovrebbe semplicemente usare estende la sottoclasse alla sua classe genitore anche se sono nella stessa cartella?

+4

hai guardato al caricamento automatico? http://www.php.net/manual/en/language.oop5.autoload.php –

risposta

13

È necessario fare qualcosa per consentire a PHP di visualizzare la definizione della classe base prima che possa elaborare la classe figlio, altrimenti si verificherà un errore irreversibile.

Questo qualcosa può essere sia un manuale require_once del file di classe di base, o autoloading (ci sono altre opzioni per caricamento automatico, ma spl_autoload_register è quello che si dovrebbe usare).

Quale approccio da utilizzare dipende dall'ambito: quando si codifica un progetto di prova piccolo, l'impostazione del caricamento automatico è probabilmente eccessiva. Ma, come il codice di base diventa sempre più grande, caricamento automatico diventa più interessante perché:

  • può nascondere la logica risoluzione file di origine complessa (ad esempio, se si dispone di una directory configurabile per le classi di base, ci sono scenari più avanzati, nonché)
  • può essere configurato in modo incrementale: è possibile utilizzare più caricatori automatici che funzionano come una catena, e ogni modulo indipendente dalla applicazione può registrare il suo caricatore automatico indipendente che convive pacificamente con tutti gli altri
2

Sì, avete per includerlo se quella classe non è dichiarata nello stesso file.

c'era anche una funzione chiamata Autoloading Classes con il quale è possibile creare una funzione come questa:

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

che verrà automaticamente includere le classi che non si trovano nel campo di applicazione esistente

Inoltre è puoi leggere anche su questa funzione: autoload_register

1

Puoi anche usare il compositore per semplificare il processo.

Fai composer.json come questo

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

Get compositore https://getcomposer.org/ ed eseguire composer install. Si dovrebbe caricare lo script di caricamento automatico del compositore una volta come

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

Se hai meno di PHP 5.3.0 quindi sostituire __DIR__ con dirname(__FILE__).

E mettere i file nella cartella src.Ad esempio se si ha la classe Acme\Utils\FooBar allora dovrebbe essere in src/Acme/Utils/FooBar.php.

Problemi correlati