Czytałem tę stronę - http://deaduseful.com/blog/posts/50-php-optimisation-tips-revisitedPHP - Zend powiedzieć unikać magicznych metod?
Jednym z zaleceń było unikanie używania metod Magic, cytowanych z pliku Zend Performance PDF, który nie podaje powodów, dla których zaleca się ich unikać.
Po pewnym wyszukiwaniu w Google (i rozwiązaniu tutaj niepowiązanego z nim pytania) zastanawiałem się, czy ktoś ma jakieś rekomendacje na tym froncie?
Używam wiele __get() w moim kodzie, zwykle do zapisywania zmiennych, których nie zawsze używam, np.
może mam tabelę z nazwy, opisu, category_id, time_added
Moja get będzie wyglądać mniej więcej tak:
public function __get($name) { switch($name) { case 'name': case 'desc': case 'category': case 'time_added': $result = do_mysql_query(); $this->name = $result['name']; $this->desc = $result['desc']; $this->category = $result['category']; $this->time_added = $result['time_added']; return $this->{$name}; break; default: throw Exception("Attempted to access non existant or private property - ".$name); } }
wydaje się to świetny sposób, aby robić rzeczy, jak ja tylko kiedykolwiek coś z bazy danych, jeśli jest to potrzebne i mogę przywrócić rzeczy takie jak $ article-> time_added, a nie błądzić po tablicach.
Czy uznano by to za złą praktykę i dodatkowe obciążenie na serwerze?
Często poszerzam klasy za pomocą magicznych metod i robię coś takiego, jeśli klasa dzieci nie pasuje do czegoś w zdobywaniu.
public function __get($name) { switch($name) { case 'name': case 'desc': case 'category': case 'time_added': $result = do_mysql_query(); $this->name = $result['name']; $this->desc = $result['desc']; $this->category = $result['category']; $this->time_added = $result['time_added']; return $this->{$name}; break; default: return parent::__get($name); } }
Czy to byłaby zła praktyka i zła wydajność? Maksymalna liczba poziomów, jakie mam przy rozszerzaniu magicznych metod to trzy.
możliwe duplikat [__get/__/__ zestaw pytań wydajności połączenia z PHP] (http://stackoverflow.com/questions/3330852/get- set-call-performance-questions-with-php) – Gordon