2010-08-19 10 views
5

Moje pytanie (a) jest jednym z najlepszych praktyk dla OOP. Im przy użyciu Codeigniter framework/PHP.Czy należy umieszczać zmienne w klasie lub konstruktorze? PHP

Mam klasy:

class Test() { 

    var $my_data = array(); 

    function my_function() { 

     //do something 

    } 

} 

to jest ok do stwierdzenia $ my_data w klasie takiego? czy powinien iść do konstruktora? Zasadniczo każda funkcja zapisuje do $ my_data, więc w pewnym sensie będzie to zmienna dla całej klasy (globalna ?, nie jest pewna co do terminologii).

Czy powinienem używać var ​​lub private? czy var jest przestarzały na rzecz deklarowania zakresu zmiennych?

+0

Każdy powód, dla którego nadal używasz składni PHP4? – Gordon

Odpowiedz

7

Jeśli chcesz $my_data aby mieć dostęp do wszystkich metod w Test, ty musi zadeklarować go na poziomie klasy.

class Test { 

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

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

} 

var jest przestarzała i jest synonimem public. Jeśli $my_data nie musi być dostępny poza Test, należy go oznaczyć jako private.

+2

Nie możesz również zadeklarować ich jako: $ this-> my_data = array(); i mieć go w dowolnym miejscu w klasie? – EvilChookie

+2

@evilchookie - tak, ale ładniej jest mieć listę zmiennych używanych na górze – Galen

0

przypadku należy „do klasy”, umieścić go w klasie. Jeśli należy "do instancji klasy", umieść ją w konstruktorze. Wygląda jednak na to, że powinieneś używać sesji.

0

jest w porządku jeśli zadeklarujesz zmienną poza konstruktorem. właściwie codeigniter nie pozwoli ci podać żadnego parametru w twoim konstruktorze. , a zmienna automatycznie doda wartość, gdy klasa zostanie utworzona. domyślnie każda zmienna php i funkcja w klasie będą miały publiczny dostęp. Naprawdę nie potrzebuję używać modyfikatora dostępu na sygnaturze. Biblioteka sama w sobie nie definiuje żadnego modyfikatora dostępu.

Powiązane problemy