Вызов нескольких методов цепочкой удобен, читабелен, но есть один момент — иногда очередной вызов может отработать не совсем гладко, и есть желание вернуть, например, false, но нужно возвращать $this. Есть вариант бросать исключение, но это не такая уж исключительная ситуация. Предлагаю простое решение.
Решение лежит в том, чтобы вместо false возвращать экземпляр такого класса (совсем немного магии):
class False_class { /** * Getting any property * * @param string $item * * @return False_class */ function __get ($item) { return $this; } /** * Calling of any method * * @param string $method * @param mixed[] $params * * @return False_class */ function __call ($method, $params) { return $this; } /** * @return string */ function __toString () { return '0'; } }
После вызова метода с ошибкой остальные не будут работать, что полезно, если есть зависимость между ними. После вызова цепочки можно проверить, приводится ли объект к строке со значением 0.
Класс можно расширить, добавив конструктор, который будет принимать код и описание ошибки, которые можно будет в последствии получить, например, через метод ::error() этого объекта.
Надеюсь, такой маленький трюк будет вам полезен.
Спасибо за внимание.
ссылка на оригинал статьи http://habrahabr.ru/post/174013/
Добавить комментарий