Intereting Posts
Сокращенное сокращение URL-адреса Goo.gl (php / curl) почему некоторые php-файлы не заканчиваются закрывающей скобкой «?>»? Как запустить загрузку с помощью typo3 / extbase? Лучший способ распознавания неиспользуемых переменных Вставка данных через ajax в базу данных mysql Запустить файл PHP внутри приложения ASP.NET MVC 4 на IIS 7? Установка Laravel 4.1 в Windows 7 // Сделать файл .phar глобально доступным для командной строки Windows Отправка PHP mail () в спам GMAIL Автоматизация получения отчета с веб-страницы Рекурсивный поиск и замена элементов массива PHP Какова таблица лидеров лучшей практики с php, mysql, memcached? Обнаруживать, если Android-приложение установлено на устройстве с помощью мобильной веб-страницы – PHP и JS Как отправить мгновенное сообщение через SIP Кто-нибудь знает, как преобразовать двоичные данные, хранящиеся в базе данных, обратно в изображение? Добавление элемента в ассоциативный массив

Каков наилучший способ автоматического генерации getters и seters для класса в php?

Я регулярно создаю класс с несколькими частными переменными. Когда экземпляр этого класса задан, должно быть возможно заполнить все переменные класса геттерами и сеттерами.

Есть ли простой способ сделать это, не набирая все эти сеттеры и геттеры для каждой переменной при создании класса?

теперь мне нужно набрать это для каждого var в классе

public function setVar($var){ $this->var = $var; } 

а также

 public function getVar(){ return $this->var; } 

Теперь мы используем RegExp, но я не знаю, является ли это самым простым способом … Мы используем Eclipse как среду, поэтому, возможно, есть некоторые полезные плагины?

С Eclipse перейдите в Настройки -> PHP -> Редактор -> Шаблоны -> Создать и используйте что-то вроде этого:

 private $$${PropertyName}; ${cursor} public function get${PropertyName}() { return $$this->${PropertyName}; } public function set${PropertyName}($$value) { $$this->${PropertyName} = $$value; } 

Чтобы использовать тип шаблона, это имя и нажмите ctrl + space – контекстное меню также должно автоматически появляться при вводе имени.

Вы посмотрели методы __set и __get? Не знаю, означает ли это то, что вы имеете в виду, но автоматически вызывается всякий раз, когда член класса является SET или Retrieved / Fetched / Accessed.

Zend Studio имеет функцию автоматического генерации геттера / сеттера.

Я думаю, что лучший способ – использовать __set и __get с некоторыми строковыми функциями. Здесь я покажу вам.

 class UserProfile { public function __get($key) { if(isset($this->$key)) { return $this->$key; } } public function __set($key,$val) { $this->cahnge($key,$val); } public function __call($key,$params) { if(substr("set",$key)) { //Update }elseif(substr("get",$key)) { //return } //Else Blah } private function change($key,$val) { if(isset($this->$key)) { $this->$key = $val; } } } 

метод __call () позволит вам установить такие функции, как

$profile->setUsername('Robert Pitt'); до тех пор, пока вы substr set / get и проверяете остальную часть строки как значение класса 🙂

другой пример

 public function __call($method,$params = array()) { if(isset($params[0]) && is_string($params[0])) { $this->$method = $params[0]; } } //.... $profile->username('Robert Pitt'); 

Theres больше работы, котор нужно сделать здесь

Возможно, лучшее разрешение:

 class base { protected $_vars = array(); public function setVar($name, $value = null) { $this->_vars[$name] = $value; } public function getVar($name) { return isset($this->_vars[$name]) ? $this->_vars[$name] : null; } } 

И просто расширьте этот класс. Кроме того, вы можете использовать методы __set и __get, но они довольно медленны.