PHP - Zend say Magische Methoden meiden?

Ich habe diese Seite gelesen -http: //deaduseful.com/blog/posts/50-php-optimization-tips-revisite

Und eine der Empfehlungen war, die Verwendung von Magic Methods zu vermeiden, zitiert aus einem Zend Performance PDF, das keinen Grund für die Empfehlung gibt, diese zu vermeiden.

Nach einigen Google-Suchanfragen (und einer nicht damit zusammenhängenden Frage) habe ich mich gefragt, ob jemand Empfehlungen dazu hat.

Ich verwende __get () viel in meinem Code, normalerweise, um Variablen zu speichern, die ich nicht immer verwende, z. B.

Ich kann eine Tabelle mit Namen, desc, category_id, time_added haben

Meine get würde ungefähr so aussehen:

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);
    }
}

Dies scheint eine großartige Möglichkeit zu sein, da ich nur dann etwas aus der Datenbank bekomme, wenn es benötigt wird, und Dinge wie $ article-> time_added refence können, anstatt mit Arrays herumzuspielen.

Wäre dies eine schlechte Praxis und eine zusätzliche Belastung des Servers?

ft werde ich Klassen mit magischen Methoden erweitern und so etwas tun, wenn die untergeordnete Klasse nicht mit etwas in einem get übereinstimm

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);
    }
}

Wäre das schlechte Übung und schlecht für die Leistung? Die maximale Anzahl von Ebenen, die ich beim Erweitern von Magiemethoden habe, beträgt drei.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage