Краткий ответ: нет, в PHP такого нет.
Я бы ни за что не стал делать волхвы c, как тот, который вы предложили.
Делать :
<?php
public static function getDependency($path) {
$container = self::container();
if ($container instanceof ContainerInterface) {
return $container->get($path);
}
}
было бы легче читать / понимать.
Теперь, что касается null
, это было описано его собственным создателем (Тони Хоаром) "The Billion Dollar Ошибка ".
Лучшим подходом было бы, чтобы self::container()
имел бы тип возврата ContainerInterface
без возможности быть null
. Пытаясь вернуть null
, он выдаст TypeError
, который потенциально может быть пойман. Таким образом, вызов ->get()
никогда не произойдет, так как исключение будет выдано ранее.
Если self::container()
вернуть что-то вроде ContainerInterface|null
, то всех вызывающих будет реализовано. logi c в качестве предложенного вами, что также приведет к (большому количеству) дублированного кода.
По той же причине вам, вероятно, будет безопаснее иметь указанный тип возвращаемого значения c для вашего зависимость:
<?php
public static function getServiceFoo($path): ServicFoo {
$container = self::container();
if (!$container instanceof ContainerInterface) {
throw new RuntimeException("Not a valid container received");
}
return $container->get($path);
}
В противном случае вы столкнетесь с той же проблемой на getServiceFoo()
, что у вас уже была на self::container()
.