цепочка методов — PHP возвращает массив, если разрывает цепочку в синглтоне

Я построил одноэлементный класс с методами цепочки (для использования в шаблоне).

Чтобы сделать цепочку работ, мне нужно вернуться new static, Это позволяет добавить следующую цепочку. Проблема в том, что я не хочу возвращать статический объект, если цепочек больше нет.

пример

<?php
class bread {
public static $array;
public static function blueprints() {
static::$array = array('some', 'values');
return new static;
}
public static function fields() {
return static::$array;
}
}

$blueprints = bread::blueprints();
$fields = bread::blueprints()->fields();

print_r($blueprint) // Returns object - FAIL
print_r($fields ) // Returns array - OK

В приведенном выше примере я хочу $blueprints вернуть массив, потому что на нем больше нет цепочек методов.

Как это можно сделать?

0

Решение

Ответ прост: вы не можете делать то, что хотите.
Метод цепочки не является особенной вещью для Php.
Для вашего примера

bread::blueprints()->fields();

Это не отличается от:

$tmp = bread::blueprints();
$tmp->fields();

Таким образом, поскольку Php не знает контекст, в котором будет использоваться результат, он не может изменить тип возвращаемого значения.
Вот еще одна версия этого вопроса:
Проверьте, является ли вызов цепочкой метода

Тем не менее, ваш класс может реализовать ArrayAccess interface.This позволит вам обрабатывать объект как массив без приведения, и вы получите полный контроль над тем, как используются члены.

2

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

Вы можете попробовать это:
$ blueprints = (массив) bread :: blueprints ();

-1

По вопросам рекламы [email protected]