php - 停止“成员具有受保护的访问权限”消息
问题描述
我不确定这是一个错误还是我做错了什么,但请考虑以下代码:
父类.php
<?php
class ParentClass {
public static function getA() {
$obj = new ChildClass();
return $obj->a();
}
}
ChildClass.php
<?php
class ChildClass extends ParentClass {
protected function a() {
return "a";
}
}
ParentClass.php
然而,PhpStorm在网上显示错误return $obj->a();
:
成员具有受保护的访问权限
手册说:
声明为 protected 的成员只能在类本身内以及通过继承类和父类访问。
这是一个 PhpStorm 错误吗?如果是这样,有没有办法禁用此错误(理想情况下,对于受影响的文件,但全局也可以在紧要关头这样做)。
旁注:我不是在讨论这是否是应该遵循的编码实践,但实际问题深藏在遗留代码中(这不是实际错误)。
解决方案
我可以用 phpStorm 2018.1 重现这一点。
这要么是 phpStorm 中的错误,要么只是 phpStorm 的警告,因为即使 PHP 可以通过这种方式访问受保护的成员,也应该警告它,因为这是你应该避免的事情。
因为它令人困惑,所以访问范围之外的受保护/私有成员。
解释在这里http://php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects
相同类型的对象可以访问彼此的私有成员和受保护成员,即使它们不是相同的实例。这是因为在这些对象内部时,特定于实现的细节是已知的。
您的两个类都是 instanceof ParentClass
,因此两者都可以访问彼此的受保护成员和私有成员。
正如 LazyOne 指出的那样,phpStorm 中实际上存在与此和类似效果有关的错误:https ://youtrack.jetbrains.com/issue/WI-11263
推荐阅读
- android - 夜间模式颜色值不适用于回收站视图项目
- python - CSS 文件(main.css)中的图像不使用 Flask 加载
- python - PermissionError:[Errno 13] 权限被拒绝:pyinstaller.exe/zipcodes windows 10
- build - 什么是构建日志文件?
- r - 如何使小数出现在棒棒糖图上
- flutter - image_picker 仅在热重载后显示图像。扑
- ios - 配置 UIView 后如何更改 UIView 的约束?
- html - R-如何将 html 格式添加到适用于囊胚的表格中?
- git - Jenkins 从以前的版本构建
- listbox - 漏洞?ListBoxGroupHeader 和 Frame = 未找到类