2016-07-13 8 views
0

Ich habe diesen Code, diePhpStorm Objektreferenz Fehlerobjekt in dem Objekt

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); 
    } 
} 

in einer anderen Datei funktioniert gut (die erfolgreich

namespace path\to\class\exampleClass; 

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

jedoch automatisch geladen wird, bekomme ich eine ‚Field portalService nicht gefunden in Klasse foo 'Warnung in PHPStorm (Hinweis: nicht in den Fehlerprotokollen funktioniert der Code gut).

Warum ist das, und wie kann ich es die Objekteigenschaften und Methoden zu erkennen?

EDIT: erweitert, tut mir leid für die Formatierung.

Um zu klären, die Klasse Methoden und Eigenschaften autocompletes durch $portalService in PhpStorm zugänglich sind, wenn ich dies tun:

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

Aber wenn ich das tue,

$this->portalService = $portalService; 

dann mich PhpStorm sagt es kann finde es nicht, wenn ich das versuche

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

Zeigen Sie uns mehr. Wo und wie wird die Klasseneigenschaft 'postalService' deklariert? Versuchen Sie es um es zu setzen, ohne es vorher zu erklären? – BeetleJuice

+0

Aktualisiert. Sorry über die Formatierung, ich werde versuchen und sortieren, dass jetzt –

+0

Danke. Das gab mir genug Informationen, um eine Antwort zu schreiben. – BeetleJuice

Antwort

1

PHPStorm ist naggi ng Sie, weil, obwohl Ihr Code kompiliert und ausgeführt wird, ist es nicht gut gestaltet. Wenn Sie versuchen, $this->portalService einen neuen Wert zuzuweisen, sucht die IDE herum, kann jedoch keine Deklaration für die Klasseneigenschaft postalService finden. Kurz gesagt, Sie weisen einer Eigenschaft, die nicht existiert, einen Wert zu. Der Code läuft immer noch, weil PHP im Gegensatz zu einigen anderen Sprachen davon ausgeht, dass Sie intended eine Klasseneigenschaft deklarieren und ihm einen Wert zuweisen möchten, obwohl Sie es nie tatsächlich deklariert haben. Die bessere Gestaltung ist eine Erklärung hinzuzufügen:

class foo { 
    private $postalService=null; //now you've formally declared the class property 

    public function preparePortalService() { 
    $this->portalService = ... // no problem. this property exists. 
    } 
} 

Sie erwähnte auch, dass:

$ portalService = new ExampleClass ... kein Problem darstellen

Das ist richtig. In dieser Zeile verweisen Sie nicht auf eine Klasseneigenschaft (zB: $this->postalService, aber Sie erstellen und setzen eine lokale Variable.

+0

Ah Gotcha, vielen Dank. –

Verwandte Themen