У меня есть поиск по цепочке методов PHP, и все учебники, доступные в сети, используют «return $ this» для цепочки методов.
Существует ли магический метод или библиотека, которые можно использовать для создания цепочки метода класса без написания «return $ this» в конце каждого метода.
В самом языке нет способа достичь этого без return $this
, Функции и методы, которые не определяют возвращаемое значение, вернут null
в PHP, как указано в документации здесь: http://php.net/manual/en/functions.returning-values.php.
Как null
не является объектом с вызываемыми методами, при вызове следующего элемента в цепочке будет выдана ошибка.
В вашей среде IDE могут быть некоторые функции, облегчающие выполнение повторяющейся задачи, например использование фрагментов кода или поиск и замена регулярных выражений. Но помимо этого, сам язык в настоящее время требует, чтобы вы разработали свой класс так, чтобы он свободно использовался с цепочкой, или специально разработали так, чтобы он не использовался.
РЕДАКТИРОВАТЬ 1
Я полагаю, вы могли бы использовать магические методы, чтобы достичь чего-то вроде этого «автоматически». Я бы посоветовал против этого, поскольку это плохая парадигма, но это не значит, что вы не можете заставить это работать.
Я думаю, что вы могли бы нам __call
магический метод, чтобы обернуть ваши настоящие методы (http://php.net/manual/en/language.oop5.overloading.php#object.call).
<?php
class Whatever
{
public function __call($method, $parameters)
{
//If you're using PHP 5.6+ (http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list)
$this->$method(...$parameters);
//If using < PHP 5.6
call_user_func_array(array($this, $method), $parameters);
//Always return self
return $this;
}
//Mark methods you want to force chaining on to protected or private to make them inaccessible outside the class, thus forcing the call to go through the __call method
protected function doFunc($first, $second)
{
$this->first = $first;
$this->second = $second;
}
}
Так что я думаю, что это возможно, но опять-таки лично я считаю, что волшебное решение, хотя оно и допустимо, выделяет значительный запах кода, и это может сделать его лучше, если вы просто справитесь с набором текста. return $this
где ты намереваться, по вашему дизайну, чтобы учесть цепочки.
Используйте инструмент, такой как phpstrom, и создайте живой шаблон для беглых методов, где return $this;
часть уже написана. Затем используйте этот шаблон с помощью ярлыка, например, свободно. Таким образом, вы никогда не будете снова писать заголовок метода, тело и возвращаемое значение для беглого метода.
http://jetbrains.com/help/phpstorm/live-templates.html
Хорошего дня