2017-07-27 3 views
-2
class A { 
public $myField = "A"; 
} 

class B extends A { 
    function __construct() { 
    $this->myField = "B"; // My IDE complains 'Field declared dynamically' 
    } 
} 

Ich benutze PHP 7.0.18 und habe kürzlich von PHPStorm 2016 auf PHPStorm 2017.2 als meine IDE aktualisiert.Sichtbarkeit in PHP - öffentliche Felder der Elternklassen

Da ich ein Upgrade, das IDE beklagt, dass Felder, die in übergeordneten Klassen deklariert werden, waren nicht zugänglich und daher erklärt sich dynamisch - , die keinen Unterschied in der Laufzeit macht, ist aber immer noch ärgerlich und führt mich zu der Frage, ob dies ein Bug in PHPStorm 2017 oder ich habe die Sichtbarkeit von Feldern in PHP bisher falsch verstanden.

+2

Ist es ein Tippfehler, gibt es keine 'Funktion' vor' __construct() 'und Klasse' B' nicht 'extend A'? Denn wenn das nicht der Fall ist, hat PHPSstorm eigentlich Recht – giorgio

Antwort

3

Es ist ein Problem in PhpStorm 2.017,2 - hoffentlich (sollte sein) befestigt ist, um 2017.02.01 endgültig.

https://youtrack.jetbrains.com/issue/WI-36285 - sehen Sie sich dieses Ticket an (Stern/Abstimmung/Kommentar), um bei jedem Fortschritt benachrichtigt zu werden.


Gerade jetzt können Sie deaktivieren nur diese bestimmte Prüfung, ob das stört Sie zu viel:

  • Ort caret auf dem Fehler/Warnung,
  • Hit Alt + Enter,
  • finden Sie den richtigen Eintrag (in der Regel am häufigsten),
  • Verwendung Pfeil rechts, um Untermenü und Cho anzuzeigen "Inspektion deaktivieren".

Alternativ finden Sie es nur in einem üblichen Settings/Preferences | Editor | Inspections Bildschirm.


P.S. Korrekte PHP-Code ohne fehlende Schlüsselwörter und andere grundlegende Fehler sofort zur Verfügung hilft auch viel. Mit Ihrem ursprünglichen Code (und sogar dem, der bis dahin in Ihrer Frage existiert) ist es nicht möglich, leicht zu erkennen, ob Sie neu in PHP sind und einfach nicht genau wissen, was Sie gerade machen. Oder wenn es tatsächlich ein Problem mit IDE ist.

0

sollten Sie eine Klasse erweitern:

class A { 
public $myField = "A"; 
} 

class B extends A { 
    public function __construct() { 
    $this->myField = "B"; 
    } 
} 
+0

Das ist natürlich was ich gemacht habe – Ferenjito

+0

War nicht in Ihrem ursprünglichen Codebeispiel –

+0

@Ferenjito mit allen Anfängern, die wir hier sehen, konnten wir nicht erraten, wenn Sie diese Antwort downvotiert haben ist nicht wirklich fair, der Fehler war dein – Kaddath

Verwandte Themen