2009-09-16 8 views
7

Skorzystałem z samouczka, aby utworzyć prostą aplikację do pisania blogów w PHP i zmodyfikowałem klasy w tym samouczku, aby miały dodatkowe możliwości. Modyfikowanie tej bardzo czystej aplikacji pozwoliło mi lepiej zrozumieć, jak działa PHP, jednak natknąłem się na interesującą sytuację.Czy ważne jest jawne deklarowanie właściwości w PHP?

Jedna z klas w moim projekcie ma około pół tuzina właściwości klasy, takich jak public $id, public $author, public $post. Te właściwości są zadeklarowane na początku tej klasy, ale uważam, że jeśli usunę wszystkie oprócz jednej z tych właściwości, aplikacja nadal będzie działała poprawnie.

Czy to źle, aby usunąć deklarację właściwości, takich jak public $datePosted od początku klasy, jeśli ta klasa nadal przekazuje zmienne do tej właściwości jak ten: $this->datePosted = $someVariableName;

Odpowiedz

12

If yo U spróbować dostępu właściwość klasa, która nie została uznana, PHP wyda zawiadomienie:

class Foo { } 

var $fu = new Foo(); 
echo $fu->baz; 

Notice: Undefined property: Foo::$baz in blah.php on line 4

Jeśli pierwszy ($fu->baz = 'blah') ustawić wartość to wygrał Narzekać, ale to nie jest świetna sytuacja.

Należy zdecydowanie zadeklarować wszystkie zmienne klasy (o ile oczywiście chcesz mieć trochę zabawy z magic methods) ...

8

jest to bardziej zrozumiałe dla każdego, kto czyta kod, że członkowie zostali jawnie zdefiniowane jako publiczne, a nie tylko domyślne, ponieważ nie przypisałeś ich jako członków publicznych.

Również $this->$datePosted jest źle, powinno być tak:

$this->datePosted = $someVariable; 

, które mogą być, dlaczego wystąpił błąd.

+0

Dzięki za odpowiedź. $ this -> $ datePosted to literówka, którą naprawił Daok. To nie był problem w moim kodzie. – somas1

2

Ponadto, jeśli usunąć deklarację i kod odczytuje tę zmienną przed pisanie do niego, trzeba będzie błąd jak

PHP Zawiadomienie: niezdefiniowanej właściwości: A :: $ unexistent w C: \ temp \ test.php na linii 8

Wskazówka: niezdefiniowanej właściwości: A :: $ unexistent w katalogu C: \ temp \ test.php na linii 8

5

PHP jest bardzo luźny, jak obsługuje definicji członków klasy. Ty technicznie nie musisz ich zadeklarować. Ale powinien, dla dwóch wielkich powodów:

  • ludzi z inteligentnymi IDE (Eclipse, Aptana, Zend Studio) będzie kochają, czy mogą skorzystać z ich edytora kodu intellisense (auto-complete) podczas pracy z Twoje zajęcia. Ta funkcja naprawdę pomaga zapobiegać błędom związanym z literówką. Jeśli nie zadeklarujesz swoich pól, IDE nie ma realnego sposobu określania pól klasy.

  • Ktoś właśnie skończył pracę ze skompilowanym językiem (C++) najprawdopodobniej wyśle ​​za Ciebie hitmana, jeśli zauważy brak prawidłowo zdefiniowanych pól. Po prostu dobrze je zadeklarować. Nie ma powodu, aby tego nie robić.

Powiązane problemy