php - PHP:如何访问覆盖的公共变量
问题描述
PHP 访问父类变量——这个问题是关于在子类中访问父类变量:
我的问题是关于在子类中访问被覆盖的父类变量
我正在尝试访问一个被覆盖的公共变量,但它没有打印任何东西。
我正在使用它访问它
echo parent::$var;
其中 var 是父类中的公共变量
error_reporting(-1);
class ParentClass{
public $var='shiva';
/* public static $var2 = 'arun';
public function memythod(){
echo 'mymethod';
}
public static function ourmethod(){
echo 'ourmethod';
}*/
}
class ChildClass extends ParentClass{
public $var = 'shiva1';
public function __construct(){
echo $this->var;
echo "<br>";
echo parent::$var;
}
public function displaymethod(){
echo $this->var;
echo parent::$var;
}
}
$obj = new ChildClass();
$obj->displaymethod();
//$obj->displayvar();
解决方案
我认为问题在于您无法从父级访问 $var 是我的观点。一旦你继承/扩展它,子类就是父类——这是被称为“Liskov Substitution”(SOLID)的面向对象原则的一部分,你可以将子类与父类互换使用。在这种情况下,ChildClass 的 $var 和 ParentClass 的 $var 是同一个引用。我不认为父母在扩展后有单独的参考。
例如,假设您有一个基础 CAR 类和一个扩展 TRUCK 类。如果您在每个类中都有一个 $type,那么您真的不希望在 TRUCK 中使用 CAR 的 $type —— 整个想法是有一个不同的。如果要访问原始父变量,请为原始值设置 getter 或公共方法,或者在 ChildClass/TRUCK 类上使用不同的变量名称。
对于您的情况,因为 ChildClass 扩展了 ParentClass,所以 ParentClass 的任何部分都应该是 ChildClass 中 THIS 上下文的一部分。
您可以像这样在 displayMethod()中访问$var :
$this->var
笔记
在评论和社区讨论之后,我编辑了这个答案,使其更加完整。谢谢@Ed Cottrel!
推荐阅读
- python - pandas groupby a column, then get average number of days from a date column for each group
- javascript - jQuery 仅从母版页布局加载
- computer-vision - 给 randomCrop 增加和损失变得爆炸
- automata - 图灵机从方程设计
- flutter - 如何在 ListView.Builder 中的列表内循环对象
- csh - echo 输出特殊字符问题
- java - 在所有试图编译的程序中找不到 System.out.println() 的符号错误
- python-3.x - 在 Python 代码上运行突变测试时出错:AttributeError: 'MutationTestRunnerThread' 对象没有属性 'isAlive'
- android - 使用 JUSTIFICATION_MODE_INTER_WORD 对齐 Android EditText
- swagger - 在 OpenAPI 3 的 #/components/schemas 顶层 `$ref`-ing 多个文件