Я построил одноэлементный класс с методами цепочки (для использования в шаблоне).
Чтобы сделать цепочку работ, мне нужно вернуться 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
вернуть массив, потому что на нем больше нет цепочек методов.
Как это можно сделать?
Ответ прост: вы не можете делать то, что хотите.
Метод цепочки не является особенной вещью для Php.
Для вашего примера
bread::blueprints()->fields();
Это не отличается от:
$tmp = bread::blueprints();
$tmp->fields();
Таким образом, поскольку Php не знает контекст, в котором будет использоваться результат, он не может изменить тип возвращаемого значения.
Вот еще одна версия этого вопроса:
Проверьте, является ли вызов цепочкой метода
Тем не менее, ваш класс может реализовать ArrayAccess interface.This позволит вам обрабатывать объект как массив без приведения, и вы получите полный контроль над тем, как используются члены.
Вы можете попробовать это:
$ blueprints = (массив) bread :: blueprints ();