PhpStorm:类型提示链接方法
PhpStorm: Type hinting chained methods
在下面的代码片段中,我在 $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();
}
正如 LazyOne 在评论中提到的,您不能键入提示第 3 级实体。
要保留方法名称重构,您可以做的是将 class 元素分配给一个变量,然后键入提示:
/** @var $logger \Monolog\Logger */
$logger = $this->container->logger;
$logger->addInfo('Some exception', $e->getMessage());
接口在 PHP 中不能有状态,只有方法签名。
要消除此错误,您可以尝试将 $this->container 分配给一个变量,并使用具体的 class.
显式键入提示
/** @var $container \Some\ConcreteContainerClass */
$container = $this->container;
$container->logger->addInfo('Some exception', $e->getMessage());
如果 logger
是那个 class 的实际 属性 而不是通过 magic getters 访问的东西,这将起作用。在这种情况下,您可能必须将记录器分配给另一个变量并执行相同的显式类型提示。
另一种选择是禁止对该行进行检查。
https://www.jetbrains.com/help/webstorm/2017.2/suppressing-inspections.html#d218445e68
在下面的代码片段中,我在 $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();
}
正如 LazyOne 在评论中提到的,您不能键入提示第 3 级实体。
要保留方法名称重构,您可以做的是将 class 元素分配给一个变量,然后键入提示:
/** @var $logger \Monolog\Logger */
$logger = $this->container->logger;
$logger->addInfo('Some exception', $e->getMessage());
接口在 PHP 中不能有状态,只有方法签名。
要消除此错误,您可以尝试将 $this->container 分配给一个变量,并使用具体的 class.
显式键入提示/** @var $container \Some\ConcreteContainerClass */
$container = $this->container;
$container->logger->addInfo('Some exception', $e->getMessage());
如果 logger
是那个 class 的实际 属性 而不是通过 magic getters 访问的东西,这将起作用。在这种情况下,您可能必须将记录器分配给另一个变量并执行相同的显式类型提示。
另一种选择是禁止对该行进行检查。 https://www.jetbrains.com/help/webstorm/2017.2/suppressing-inspections.html#d218445e68