php - PHP 静态属性和 const 覆盖
问题描述
我想创建一个类继承(扩展)另一个 PHP 类,该类具有我想在我的扩展类中覆盖的受保护的 const。
我创建了一个父类(例如 A)和一个继承类(例如 B)。class A
定义了一个protected const
(命名为 CST)。class B
也覆盖这个常量。
当调用从 A 继承的显示 的方法类 B 时self::CST
,打印的值是来自 A 的 CST 值,而不是在 B 中覆盖的 const CST。
我使用名为 的静态属性观察到相同的行为$var
。
似乎self
方法中使用的总是指定义类(在我的示例中为 A),而不是用于调用静态方法的类。
class A
{
protected static $var = 1;
protected const CST = 1;
public static function printVar()
{
print self::$var . "\n";
}
public static function printCST()
{
print self::CST . "\n";
}
}
class B extends A
{
protected static $var = 2;
protected const CST =2;
}
A::printVar();
A::printCST();
B::printVar();
B::printCST();
有没有办法允许我的静态方法printCST()
在调用时显示 2B::printCST()
而无需重写方法class B
并有利于 OOP 的代码可重用性?
解决方案
Dharman 建议使用static::CST
而不是self::CST
.
这是我的问题的解决方案。
推荐阅读
- mysql - 我将如何在 SQL / SQLALCHEMY 中设计相互依赖的外键
- javascript - 在 React-Redux 中实时重新排序列表的最佳方法?
- qliksense - Qliksense ::计算尺寸
- twilio -
动词引发“发现以元素'Pay'开头的无效内容。'{Play”之一 - c# - 如何将 ExecuteScalar 与存储过程一起使用?
- bash - bash:bash 脚本给出了错误的替换错误
- angular - Angular 7 在应用程序主组件的后台运行多个方法会减慢负载吗?
- python - 切片列表等待并走得更远
- android - ConstraintLayout - 在根中居中 TextView 但不覆盖 Button
- sql - 使用主键且多个重复项在另一个表中的 SQL 中的 INSERT INTO SELECT 查询