PHP中的可见性 - 父类的公共字段

时间:2017-07-27 09:22:27

标签: php phpstorm

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。

自从我升级以来,IDE抱怨说,在父类中声明的字段无法访问,因此动态声明 -  这在运行时没有任何区别,但仍然很烦人,并引出了一个问题,这是否是PhpStorm 2017中的一个错误,或者我误解了PHP中字段的可见性。

2 个答案:

答案 0 :(得分:3)

这是PhpStorm 2017.2中的一个问题 - 希望(应该)在2017.2.1决赛中得到修复。

https://youtrack.jetbrains.com/issue/WI-36285 - 观看此机票(星级/投票/评论)以获得有关任何进展的通知。

现在你可能只是禁用那个特定的检查,如果这太困扰你了:

  • 将插入符号置于错误/警告上,
  • 点击 Alt + Enter
  • 找到正确的条目(通常是最顶层的条目),
  • 使用向右箭头显示子菜单,然后选择“禁用检查”。

或者只是在通常的Settings/Preferences | Editor | Inspections屏幕中找到它。

P.S。提供正确的PHP代码而不会错过关键字和其他基本错误马上也有很多帮助。使用您的原始代码(甚至是您问题中的那个代码),您无法轻易判断您是否是PHP的新手并且根本不知道您正在做什么......或者它确实是IDE的问题。

答案 1 :(得分:0)

你应该扩展A类:

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

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