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

时间:2016-07-13 02:39:39

标签: php object phpstorm

我有这个代码,工作正常

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')
  {}
}

但是,我在课堂上找不到一个' Field portal服务。 PhpStorm中的警告(注意:不在错误日志中,代码工作正常)。

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

编辑:已展开,对不起格式化。

为了澄清,如果我这样做,可以通过PhpStorm中的$portalService访问类方法和属性autocompletes:

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

但如果我这样做,

$this->portalService = $portalService;

然后PhpStorm告诉我,当我尝试这个时它找不到它

$this->portalService->__setSoapHeaders($portalservice_header);

1 个答案:

答案 0 :(得分:1)

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 = new exampleClass ...没有出现问题

那是对的。在这一行中,您并未引用类属性(例如:$this->postalService,但您正在创建并设置局部变量。