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

私はPHP 7.0.18を使用し、最近PhpStorm 2016からPhpStorm 2017.2を私のIDEとしてアップグレードしました。PHPの可視性 - 親クラスの公開フィールド

私はアップグレードして以来、IDEは親クラスで宣言されているフィールドにはアクセスできず、したがって動的に宣言されていると不平を言っています - 実行時には何の違いもありませんが、 PhpStorm 2017のバグか、これまでPHPのフィールドの可視性を誤解していました。

+2

__construct()の前には 'function'がなく、' B'は 'Aを拡張しませんか?もしそうでなければ、PHPStormは実際には正しいです – giorgio

答えて

3

それはPhpStorm 2017.2では問題だ - うまくいけば(する必要があります)2017年2月1日の最終のために固定。

https://youtrack.jetbrains.com/issue/WI-36285 - このチケット(スター/投票/コメント)を見て、進捗状況を通知します。それはあまりにもあなたを気に場合


は今、あなただけでは、特定の検査を無効にすることがあります。

  • 場所キャレットをエラー/警告の上、
  • は+入力Altキーを打つ、
  • (通常は一番上にあるものを見つける)
  • 右矢印 ose "検査を無効にする"。

また、通常のSettings/Preferences | Editor | Inspectionsの画面で見つけてください。


P.S.キーワードやその他の基本的なエラーがなくても正しいPHPコードを提供すぐにが役立ちます。オリジナルのコード(さらにあなたの質問にあるものまで)では、PHPを初めて使い慣れているかどうかを簡単に知ることができず、あなたがしていることを正確に知らないだけでなく、実際にIDEに問題がある場合もあります。

0

あなたはクラスを拡張する必要があります。

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

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

これはもちろん私がやったこと – Ferenjito

+0

元のコードサンプルにはありませんでした。 –

+0

@Ferenjito私たちはここで見ているすべての初心者で、私たちは推測できませんでした。本当に公正ではない、間違いはあなたでした – Kaddath