PhpStorm 对象引用对象中的错误对象


PhpStorm object reference error object within object

我有这段代码,工作正常

use path'to'class'exampleClass;
class foo {
  public function preparePortalService() {
    $this->portalService = new exampleClass(array(), $this->getWsdl('portal'));
    $portalservice_header = new 'SoapHeader($this->getWsdl('portal'), 'SessionHeader', $header);
    // Set the Session Header.
    $this->portalService->__setSoapHeaders($portalservice_header);
  }
}

在另一个文件中(已成功自动加载

namespace path'to'class'exampleClass;
class exampleClass extends 'SoapClient {
  public function __construct(array $options = array(), $wsdl = 'wsdl/Interface.xml')
  {}
}

但是,我在 PhpStorm 中收到"在类 foo 中找不到字段门户服务"警告(注意:不在错误日志中,代码工作正常)。

为什么会这样,如何让它识别对象属性和方法?

编辑:展开,抱歉格式。

澄清一下,如果我这样做,可以通过 PhpStorm 中的 $portalService 访问类方法和属性自动完成:

$portalService = new exampleClass(array(), $this->getWsdl('portal'));

但如果我这样做,

$this->portalService = $portalService;

然后 PhpStorm 告诉我当我尝试这个时

它找不到它
$this->portalService->__setSoapHeaders($portalservice_header);

PHPStorm 很烦你,因为尽管你的代码可以编译和运行,但它的设计并不好。 当您尝试将新值分配给 $this->portalService 时,IDE 会四处查找,但找不到类属性 postalService 的任何声明。 简而言之,您正在为不存在的属性分配一个值。

代码仍在运行,因为与其他一些语言不同,PHP 会推断您打算声明一个类属性并为其赋值,即使您从未实际声明过它。 更好的设计是添加一个声明:

class foo {
  private $postalService=null; //now you've formally declared the class property
  public function preparePortalService() {
    $this->portalService = ... // no problem. this property exists.
  }
}

您还提到:

$portalService = 新示例类...不构成问题

没错。在这一行中,您不是在引用类属性(例如:$this->postalService),而是在创建和设置局部变量。