在下面的代码段中,我在$contactInfo[0]
上得到了类型提示,然后在$order
上得到了提示。
我想与logger
相同,它是\Monolog\Logger
类型的对象,可以作为\psr\container\ContainerInterface
的成员访问
我正在使用PhpStorm,它警告我Field 'logger' not found in Psr\Container\ContainerInterface
/**
* @param Order $order
* @param ContactInfo[] $contactInfo
* @var Monolog\Logger $this->container->logger
*/
private function buildCreateOrderJSON(Order $order, $contactInfo)
{
try {
$currentDate = new DateTime();
} catch (Exception $e) {
$this->container->logger->addInfo('Some exception', $e->getMessage());
return;
}
$lastName = $contactInfo[0]->getLastName();
$order->getInvoiceNumber();
}
答案 0 :(得分:1)
正如LazyOne在评论中提到的那样,您不能输入提示三级实体。
要保留方法名称重构,您可以做的是将您的类元素分配给变量,然后键入提示:
/** @var $logger \Monolog\Logger */
$logger = $this->container->logger;
$logger->addInfo('Some exception', $e->getMessage());
答案 1 :(得分:0)
接口在PHP中不能具有状态,只能具有方法签名。
为使此错误消失,您可以尝试将$ this-> container分配给变量,然后使用具体的类显式键入提示。
/** @var $container \Some\ConcreteContainerClass */
$container = $this->container;
$container->logger->addInfo('Some exception', $e->getMessage());
如果logger
是该类的实际属性,而不是通过魔术获取器访问的属性,则可以使用。在这种情况下,您可能必须将logger分配给另一个变量,并执行相同的显式类型提示。
另一个选择是抑制该行的侵害。 https://www.jetbrains.com/help/webstorm/2017.2/suppressing-inspections.html#d218445e68