Stavo leggendo questa pagina - http://deaduseful.com/blog/posts/50-php-optimisation-tips-revisitedPHP - Zend dire evitare i metodi magici?
E una delle raccomandazioni era quello di evitare l'uso di metodi magici, citato da uno Zend prestazioni PDF che non fornisce alcuna ragione per la sua raccomandazione per evitarli.
Dopo qualche ricerca su Google (e finire qui per una domanda non correlata) mi sono chiesto se qualcuno avesse qualche raccomandazione su quel fronte?
Io uso __get() molto nel mio codice, in genere per salvare variabili che non sempre utilizzo, ad es.
io possa avere una tabella con nome, disc, category_id, time_added
mio get sarebbe simile a questa:
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); } }
Questo mi sembra un ottimo modo per fare le cose come ho sempre e solo ottenere qualcosa dal database se è necessario e posso riconfermare cose come $ article-> time_added piuttosto che armeggiare con array.
Questo potrebbe essere considerato una cattiva pratica e un carico aggiuntivo sul server?
Spesso estenderò le classi con metodi magici e farò qualcosa del genere se la classe figlio non corrisponde a qualcosa in un get.
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); } }
Sarebbe una cattiva pratica e un male per le prestazioni? Il numero massimo di livelli che ho quando si estendono i metodi magici è tre.
possibile duplicato del [/ __/__ set domande di prestazioni chiamata __get con PHP] (http://stackoverflow.com/questions/3330852/get- set-call-performance-questions-with-php) – Gordon