2016-07-13 5 views
0

Я этот код, который отлично работает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') 
    {} 
} 

Однако, я получаю «Поле portalService не найденный в классе foo 'warning в PhpStorm (Примечание: не в журналах ошибок, код работает нормально).

Почему это и как его получить, чтобы распознать свойства и методы объекта?

EDIT: расширен, извините за форматирование.

Чтобы уточнить, методы класса и свойства autocompletes доступны через $portalService в PhpStorm, если я это сделать:

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

Но если я это сделаю,

$this->portalService = $portalService; 

затем PhpStorm говорит мне, что могу Не находите его, когда я пытаюсь это сделать

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

Показать еще. Где и как объявляется свойство класса 'postalService'? чтобы установить его без предварительного объявления? – BeetleJuice

+0

Обновлено. Извините за форматирование, я попробую и отсортирую его сейчас –

+0

Спасибо, что дал мне достаточно информации, чтобы написать ответ. – BeetleJuice

ответ

1

PHPStorm является naggi вы, потому что, хотя ваш код будет компилироваться и запускаться, он не очень хорошо разработан. Когда вы пытаетесь присвоить новое значение $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 = новые ExampleClass ... не представляет проблему

Это правильно. В этой строке вы не имеете в виду свойство класса (например: $this->postalService, но вы создаете и устанавливаете локальную переменную.

+0

Ах получил, спасибо большое. –

Смежные вопросы