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


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 中字段的可见性。

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

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


现在,如果该特定检查太困扰您,您可以禁用该特定检查:

  • 将插入符号放在错误/警告上,
  • 点击Alt + 输入
  • 找到正确的条目(通常是最上面的一个(,
  • 使用向右箭头显示子菜单,然后选择"禁用检查"。

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


附言提供正确的PHP代码而不会立即丢失关键字和其他基本错误也有很大帮助。使用您的原始代码(甚至是您的问题中的代码(,不可能轻易判断您是否是PHP的新手,并且根本不确切知道自己在做什么。或者如果它确实是 IDE 的问题。

你应该扩展 A 类:

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

最新更新