我有这个代码,工作正常
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);
答案 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
,但您正在创建并设置局部变量。