2012-03-16 17 views
6

Zastanawiam się, czy właściwość klasy jest instancjonowana i używana tylko w jednej metodzie klasy, czy powinna to być właściwość klasy w ogóle, czy powinna być po prostu zmienną lokalną dostępną tylko dla tej metody klasy?Czy powinienem zachować zmienne używane tylko w jednej metodzie lokalnej lub zadeklarować je jako właściwości klasy?

Na przykład, należy zachować zmienną używany tylko w jednej metodzie jako zmiennej lokalnej tak:

class myClass 
{ 
    public function myMethod() 
    { 
     $_myVariableUsedOnlyOnce = "Hello World"; 
     echo $_myVariableUsedOnlyOnce; 
    } 
} 

Albo powinienem zrobić zmienną prywatną klasa własności takiego:

class myClass 
{ 
    private $_myVariableUsedOnlyOnce; 

    public function myMethod() 
    { 
     $this->_myVariableUsedOnlyOnce = "Hello World"; 
     echo $this->_myVariableUsedOnlyOnce; 
    } 
} 

Które podejście "pachnie"? Jakie są zalety tworzenia wszystkich właściwości klasy zmiennych metodowych innych niż wtedy, gdy potrzebuję print_r() całego obiektu do celów debugowania?

Dzięki

+1

Jeśli masz pewność, że zostanie użyty tylko raz, ustaw go lokalnie na metodę. W przeciwnym razie możesz zrobić to prywatnie. _W razie braku potrzebujesz wartości tej zmiennej, aby przetrwać między wywołaniami tej metody, w której musiałaby ona być przynajmniej "statyczna" w metodzie. –

Odpowiedz

4

Jeśli zachodzi potrzeba posiadania trwałości między wywołaniami funkcji, właściwość klasy będzie najlepsza, tak aby poruszała się po obiekcie. Możesz również użyć go z innych powodów w przyszłości w innych funkcjach. Jednak zwiększa obciążenie.

Ogólnie rzecz biorąc, klasa powinna zawierać trochę rzeczywistego odpowiednika, więc jeśli zmienna odpowiada temu, co ma sens, np. klasa osoby ma wysokość $, a następnie należy do właściwości klasy. W przeciwnym razie, jeśli jest to tylko część wewnętrznych obliczeń metody, to tak naprawdę nie jest przypisane do klasy, np. osoba nie ma shoelaceIteratora $ lub czegoś podobnego.

Twierdzę, że mylący projekt obiektu będzie miał większy zapach niż potencjalnie niewielkie obciążenie pamięci (choć zależy to od wielkości zmiennej).

0

pierwsze chciałbym zapytać, czy naprawdę trzeba zmiennej/nieruchomość w ogóle, jeśli używasz tylko raz. Jeśli chodzi o "zapach", właściwość jest przechowywana w pamięci przez całe życie obiektu, podczas gdy zmienna jest tylko w pamięci, dopóki metoda nie zostanie wykonana.

+0

Oczywiście był to tylko prosty przykład i chciałbym zrobić więcej ze zmienną w metodzie, niż tylko echo "Hello World". Ale dzięki, widzę korzyści w zakresie alokacji pamięci. – Tom

+0

To nie tylko przydzielanie pamięci, ponieważ "zedat" zwrócił uwagę na szybkość. – nathanjosiah

0

Jeśli nie potrzebujesz zmiennej poza metodą, nie powinna to być żadna własność klasy. Ponadto dostęp do zmiennych lokalnych jest szybszy.

0

W czystym podejściu do projektowania sugerowałbym dokonanie wyboru w zależności od tego, jaki atrybut/właściwość ma modelować.

Pod względem wydajności, posiadanie jednego atrybutu statycznego jest lepsze, ponieważ miejsce w pamięci nie jest przydzielane dla każdej instancji klasy.

1

Te zmienne lokalne nie są właściwościami obiektu.

Nie definiują obiektu, dlatego nie powinny być zadeklarowane jako prywatne.

Powiązane problemy