Цепочка PHP метода без написания много возврата это

У меня есть поиск по цепочке методов PHP, и все учебники, доступные в сети, используют «return $ this» для цепочки методов.

Существует ли магический метод или библиотека, которые можно использовать для создания цепочки метода класса без написания «return $ this» в конце каждого метода.

-2

Решение

В самом языке нет способа достичь этого без 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 где ты намереваться, по вашему дизайну, чтобы учесть цепочки.

2

Другие решения

Используйте инструмент, такой как phpstrom, и создайте живой шаблон для беглых методов, где return $this; часть уже написана. Затем используйте этот шаблон с помощью ярлыка, например, свободно. Таким образом, вы никогда не будете снова писать заголовок метода, тело и возвращаемое значение для беглого метода.

http://jetbrains.com/help/phpstorm/live-templates.html

Хорошего дня

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector