2013-01-16 12 views
27

Diciamo che ho due file class.php e page.phpCome utilizzare una classe PHP da un altro file

class.php

<?php 
class IUarts { 
    function __construct() { 
     $this->data = get_data('mydata'); 
    } 
} 
?> 

che è molto esempio rudamentario, ma diciamo che voglio usare:

$vars = new IUarts(); 
print($vars->data);` 

nel mio file page.php; come faccio a farlo? Se faccio include(LIB.'/class.php'); mi urla e mi dà Fatal error: Cannot redeclare class IUarts in /dir/class.php on line 4

risposta

42

È possibile utilizzare include/include_once o require/require_once

require_once('class.php'); 

alternativa, utilizzare autoloading aggiungendo page.php

Funziona anche aggiungendo la funzione __autoload in una lib che si include in ogni file come utils.php.

C'è anche questo post che ha un approccio piacevole e diverso.

Efficient PHP auto-loading and naming strategies

+0

"__autoload() è deprecato, l'uso spl_autoload_register() invece" Dal momento che questo risultato è piuttosto alto su google, forse qualcuno dovrebbe modificarlo e lo fai notare più chiaramente? – Simon

4

Utilizzare include_once invece.
Questo errore indica che hai già incluso questo file.

include_once(LIB.'/class.php');

8

In questo caso, sembra che hai già incluso il file da qualche parte. Ma per i file di classe, dovresti davvero "includerli" usando require_once per evitare quel genere di cose; non includerà il file se lo è già stato. (E di solito si dovrebbe usare require[_once], non include[_once], con la differenza che require causerà un errore fatale se il file non esiste, invece di emissione di un avvertimento.)

-1

Usa include("class.classname.php");

E classe dovrebbe usare <?php //code ?> not <? //code ?>

+0

Questa seconda cosa che hai detto non è specifica per questa domanda o corretta. '' è solo una sintassi più recente, credo che possa essere abilitato o disabilitato nel 'php.ini'. (Scusa per resuscitare questo) –

Problemi correlati