2010-08-19 11 views
5

Le mie domande sono una delle migliori pratiche per OOP. Sto usando il framework Codeigniter/PHP.Devo posizionare variabili in classe o costruttore? PHP

Ho una classe:

class Test() { 

    var $my_data = array(); 

    function my_function() { 

     //do something 

    } 

} 

è ok dichiarare $ my_data nella classe del genere? o dovrebbe andare nel costruttore? Fondamentalmente ogni funzione scriverà su $ my_data quindi in un certo senso sarà una variabile di classe (globale ?, non sono sicuro della terminologia)

Inoltre, dovrei usare var o privato? è var deprecato a favore di dichiarare lo scope delle variabili?

+0

Qualsiasi motivo si sta ancora utilizzando la sintassi PHP4? – Gordon

risposta

7

Se si desidera $my_data di essere a disposizione di tutti i metodi in Test, è necessario dichiararlo a livello di classe.

class Test { 

    private $my_data1 = array(); // available throughout class 

    public function __construct() { 
     $my_data2 = array(); // available only in constructor 
    } 

} 

var è deprecato ed è sinonimo di public. Se lo $my_data non deve essere disponibile al di fuori di Test, deve essere dichiarato private.

+2

Non puoi anche dichiararli come: $ this-> my_data = array(); e averlo a disposizione ovunque nella classe? – EvilChookie

+2

@evilchookie - sì, ma è meglio avere una lista di variabili usate in alto – Galen

0

Se appartiene "alla classe", metterlo nella classe. Se appartiene "a un'istanza della classe", inseriscilo nel costruttore. Sembra come se dovessi usare la sessione, comunque.

0

la sua multa se si dichiara la variabile al di fuori del costruttore. effettivamente codeigniter non ti permetterà di dare alcun parametro al tuo costruttore. e la variabile verrà automaticamente assegnata al valore quando la classe viene istanziata. per impostazione predefinita, qualsiasi variabile php e funzione con in una classe avranno un accesso pubblico. Non ho davvero bisogno di usare il modificatore di accesso su codeigniter. la libreria non definisce alcun modificatore di accesso.

Problemi correlati