PHP - Зенд, скажем, избегать магических методов?
Я читал эту страницу -http://deaduseful.com/blog/posts/50-php-optimisation-tips-revisited
И одна из рекомендаций заключалась в том, чтобы избегать использования магических методов, приведенных в PDF-документе Zend Performance, в котором нет оснований рекомендовать их избегать.
После некоторого поиска в Google (и тут я нашел несвязанный вопрос) я подумал, есть ли у кого-нибудь какие-либо рекомендации по этому поводу?
Я использую __get () много в моем коде, обычно для сохранения переменных, которые я не всегда использую, например.
У меня может быть таблица с именем, desc, category_id, time_added
Мой 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: throw Exception("Attempted to access non existant or private property - ".$name); } }
Это кажется отличным способом сделать что-то, так как я получаю что-то из базы данных только тогда, когда это необходимо, и я могу защищать такие вещи, как $ article-> time_added, а не возиться с массивами.
Будет ли это считаться плохой практикой и дополнительной нагрузкой на сервер?
Часто я расширяю классы с помощью магических методов и делаю что-то подобное, если дочерний класс не совпадает с чем-то в процессе получения.
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); } }
Будет ли это плохой практикой и плохой для производительности? Максимальное количество уровней, которые у меня есть при расширении магических методов, - три.