Product:find()->asArray->all(); как реализовать?

162
05 сентября 2018, 03:30

Не могу понять вот это: Product:find()->asArray->all(); Я понимаю какой результат будет после этого выражения но, как реализованы вот эти стрелочки. Да я знаю когда мы создаем объект $obj = new Test(); мы можем обратиться к свойству или методу вот так $obj->method(); или так $obj->properte;. Можно ли сделать так $obj->method()->propery; Помогите разобраться с этой реализацией. Заранее спасибо!

Answer 1

Рассматривайте выражение Products::find()->asArray()->all(); как последовательное выполнение следующих операций:

$p = Products::find();
$p = $p->asArray();
$p = $p->all();

Поскольку нам неизвестно, что делает каждый из ваших методов, рассмотрим общую идею кода в примере: Products::find()->asArray()->all();.

Реализовать это можно двумя следующими классами:

class Products{
    private function __construct() {}
    public static function find() { return new Product(); }
}
class Product{
    private $data; //объект stdClass, хранящий данные
    private $asArray;
    public $somePublicField;
    public function __construct() {}
    public function asArray() {
        $this->asArray = true;
        return $this;
    }
    public function all() {
        return json_decode(json_encode($this->data), $this->asArray); //конвертация объекта в массив, если $asArray = true
    }
}

Чтобы реализовать $obj->method()->propery используя код выше можно сделать так:

$p = Product::find()->asArray()->somePublicField;
READ ALSO
По какому урл доступны все посты пользовательской таксономии Wordpress?

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

Я создал кастомный тип поста и привязал к нему таксономию, делал все по сайту камы, почти все урлы работают правильно кроме одного момента,...

186
Как спарсить текст тега strong

Как спарсить текст тега strong

Как вот на этой странице используя PhpQuery спарсить информацию о заказчике (то что выделено жирным шрифтом)?

180
PHP реализация наследования

PHP реализация наследования

Имеется следующая архитектура (PHP):

153
Анализ php-кода на совместимость с php 5.2.4

Анализ php-кода на совместимость с php 5.2.4

Где найти анализатор кода на совместимость с php 52

146