我想在PHP中为抽象类做类似的事情:
abstract class SimpleAbstractObject {
// Not valid PHP code
abstract protected static $Description;
public static function getDescription(){
return self::$Description;
}
}
当然,上述情况无法运行:
Fatal error: Properties cannot be declared abstract
我们的想法是,任何扩展'SimpleAbstractObject'的类都必须定义“Description”变量,并且在定义后不能更改。例如:
class SimpleObject extends SimpleAbstractObject {
protected static $Description = "This is a Simple Object";
}
class AnotherObject extends SimpleAbstractObject {
protected static $Description = "This is a Another more complicated object";
}
因此最终结果使用如下:
echo SimpleObject::getDescription();
echo AnotherObject::getDescription();
上面会打印出来:
This is a Simple Object
This is a Another more complicated object
答案 0 :(得分:0)
自5.3以来,您可以将static
关键字用于其late-static-binding属性。
abstract class SimpleAbstractObject {
public static function getDescription() {
if(!isset(static::$Description))
throw new UnexpectedValueException(
get_called_class() .
' must define a static getDescription method');
return static::$Description;
}
}
子类保持原样
class SimpleObject extends SimpleAbstractObject {
protected static $Description = "This is a Simple Object";
}
class AnotherObject extends SimpleAbstractObject {
protected static $Description = "This is a Another more complicated object";
}
但现在按预期工作
这是一个简单的对象这是另一个更复杂的对象
这种方法的唯一缺点是你放弃了'编译时'检查。