@tgarl

Почему последовательный вызов работает, а в одну строку нет?

Решил переписать десяток отдельных функций в виде одного класса с его методами.
И вот возникла заковыка, что я не так делаю.
оформил в виде
class ProductAmount
{
function __construct($array=array()){ ... }
function getOfers($items=[]){ ... }
function getProfuctStore($inListStore='N'){ ... }
...
}


Если я вызываю последовательно все
$obj = new \ProductAmount();
$obj->getOfers([229411]); //return true
$obj->getProfuctStore('Y');//return true
$res= $obj->setListStore('Y'); //return array
...

то все работает, а если я хочу в одну строку это записать, то нет
$obj = new\ProductAmount();
$res= $obj->getOfers([229411])->getProfuctStore('Y')->setListStore('Y');

получаю ошибку Call to a member function getProfuctStore() on bool
  • Вопрос задан
  • 115 просмотров
Решения вопроса 4
grantur5707
@grantur5707
Full Stack Web Developer
Метод getOfers() должен возвращать объект класса, а не true.

class ProductAmount
{
    function __construct($array = array()) { 
        ...
    }

    function getOfers($items = []) {
        ...
        return $this;
    }

    function getProfuctStore($inListStore = 'N') {
        ...
        return $this;
    }

    function setListStore($inListStore = 'Y') {
        ...
        return $this;
    }
}


$obj = new ProductAmount();
$res = $obj->getOfers([229411])->getProfuctStore('Y')->setListStore('Y');
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для такой цепочки каждая функция должна возвращать $this.
По неймингу - префиксы set и get, как правило используются для сеттеров и геттеров, то есть функций, устанавливающих и возвращающих значения свойств экземпляра. Использовать их для других целей, конечно, можно, но крайне не рекомендуется.
Ответ написан
uDenX
@uDenX
PHP Developer
Ответ написан
Комментировать
motokraft
@motokraft
Кратко о себе
Тебе необходимо что бы функция "getProfuctStore" возвращала тот же объект в котором оно находится.

function getProfuctStore($inListStore='N') { return $this; }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы