Пример: Код (Text): class test { public $params = array(); public function set($set) { echo '<p>Добавляем новое значение в свойство.</p>'; $this->params[] = $set; return $this; } public function show() { echo 'Вывод: '; print_r($this->params); return $this; } public function clear() { echo '<p>Очистка.<p>'; $this->params = array(); } } $obj = new test(); $obj->set('привет')->show()->clear(); $obj->show(); Выводит: Вопрос: есть ли волшебные методы для подобных реализаций или постоянно нужно возвращать $this. К примеру хочется написать универсальный класс для какой то специфической задачи, где методы можно было бы в разных порядках друг за дружкой вызывать p.s неужели обновился форум... ихуу) p.s.s было лучше XD
Re: return $this в методе. вопрос. Этот паттерн называется chaining и да, его можно реализовать только return $this;
Re: return $this в методе. вопрос. просто вы не умеете готовить. вегетарианцы, нах... Код (Text): <?php /** * @author 440hz * @mail 440hz@mail.ru */ class singleton { /** * Синглетон * * @static * @return get_called_class */ public static function getInstance() { static $oHandler = null; if (is_null($oHandler)) { $sClass = get_called_class(); $oHandler = new $sClass; } return $oHandler; } } /** * Обертка */ class chaining extends singleton { /** * @param $sMethod Вызываемый метод * @param $sParams Массив параметров * @return fokus Вернем самого себя */ public function __call($sMethod, $sParams) { $sMethod = '_' . $sMethod; $this->$sMethod($sParams); return $this; } } /** * Расширяемый класс */ class hello extends chaining { public function _x($mParams) { print(PHP_EOL . "X: " . $mParams[0]); } public function _y($mParams) { print(PHP_EOL . "Y: " . $mParams[0]); } public function _z($mParams) { print(PHP_EOL . "Z: " . $mParams[0].','.$mParams[1]); } } print("Start..."); hello::getInstance()->x(1)->y(2)->z(3,4); print(PHP_EOL . "End" . PHP_EOL); Код (Text): www# php call.php Start... X: 1 Y: 2 Z: 3,4 End читаем. учим. наслаждаемся. http://ru2.php.net/manual/ru/language.oop5.magic.php
440Hz Это все только ради того, чтобы выбросить return $this из методов? Так мы заодно теряем оригинальные имена методов.
[Вопрос: есть ли волшебные методы для подобных реализаций или постоянно нужно возвращать $this.] я ответил на вопрос, а вот накуя оно надо дело не мое. лично я так НЕ делаю.