Php 停止“成员具有受保护的访问权限”消息 我不确定这是不是一个bug,或者我做错了什么,但是考虑下面的代码:

Php 停止“成员具有受保护的访问权限”消息 我不确定这是不是一个bug,或者我做错了什么,但是考虑下面的代码:,php,phpstorm,Php,Phpstorm,ParentClass.php ChildClass.php 然而,PhpStorm在返回$obj->a行的ParentClass.php中显示了一个错误;说: 成员具有受保护的访问权限 即: 声明为受保护的成员只能在类本身内部以及通过继承和父类进行访问 这是PhpStorm bug吗?如果是这样,有没有一种方法可以在理想情况下禁用受影响文件的此错误,但在必要时也可以全局禁用 旁注:我没有讨论这是否是应该遵循的编码实践,但实际问题是遗留代码中的深层次问题,我非常不愿意修改,这导致我的项目导航栏上

ParentClass.php

ChildClass.php

然而,PhpStorm在返回$obj->a行的ParentClass.php中显示了一个错误;说:

成员具有受保护的访问权限

即:

声明为受保护的成员只能在类本身内部以及通过继承和父类进行访问

这是PhpStorm bug吗?如果是这样,有没有一种方法可以在理想情况下禁用受影响文件的此错误,但在必要时也可以全局禁用


旁注:我没有讨论这是否是应该遵循的编码实践,但实际问题是遗留代码中的深层次问题,我非常不愿意修改,这导致我的项目导航栏上布满了扭曲的红线,以指示不是实际错误的错误

父类无法访问子类的a方法,因为父类没有该函数,它没有继承该函数,并且受保护,因此不能从其类或从ChildClass派生的类外部调用它


如果在ParentClass中定义了,那么可以在ChildClass中创建函数getA,然后它就可以访问一个

这可能是phpStorm中的一个bug,也可能只是phpStorm发出的警告,因为即使在PHP中可以通过这种方式访问受保护的成员,也应该发出警告,因为这是您可能应该避免的事情

因为访问范围外的受保护/私有成员会让人困惑

解释就在这里

同一类型的对象将具有相互访问的权限,并且是私有的 受保护的成员,即使它们不是相同的实例。这是 因为特定于实现的详细信息在 在那些物体里面

您的两个类都是ParentClass的实例,因此都可以访问彼此受保护的成员和私有成员


正如LazyOne所指出的,phpStorm中实际上存在与此和类似效果相关的bug:

$obj应该是$this.@BenM$obj是正确的。这个函数是静态的,所以$this实际上并不意味着anything@BenM就PHP而言,代码是正确的检查:澄清:右键单击最右边的滚动条>选择customize highlight Level如果我理解正确-声明受保护的成员几乎只能在类本身内通过继承访问还有父类。@apokryfos我认为继承和父类之间的and是一个输入错误。它应该继承父类。@ChrisBornhoft-这是不合逻辑的。父类与继承类相反。如果继承子类不符合逻辑,则可以继承父类。o哦,请求的访问不是来自同一类型的对象。它在类级别上是静态的。或者问题是,同一类型实际上意味着在该类的代码中。所以在儿童班里就不会有任何警告。我不会把它归类为代码错误,而是文档错误:doc没有完全说出它想说什么。
<?php
class ParentClass {    
    public static function getA() {
        $obj = new ChildClass();
        return $obj->a();
    }
}
<?php
class ChildClass extends ParentClass {
    protected function a() {
        return "a";
    }
}