PHP 中的抽象常量 - 强制子类定义常量
我注意到PHP中不能有抽象常量。
有没有办法强制子类定义一个常量(我需要在其中一个抽象类内部方法中使用)?
我注意到PHP中不能有抽象常量。
有没有办法强制子类定义一个常量(我需要在其中一个抽象类内部方法中使用)?
这可能有点“黑客”,但只需很少的努力即可完成工作,但是如果未在子类中声明常量,则只会显示不同的错误消息。
自引用常量声明在语法上是正确的,并且可以毫无问题地进行解析,仅当该声明在运行时实际执行时才引发错误,因此必须在子类中重写抽象类中的自引用声明,否则会出现致命错误:。Cannot declare self-referencing constant
在此示例中,抽象父类强制其所有子类声明变量 。此代码运行良好,输出 .但是,如果子类未声明变量,则将触发致命错误。Foo
NAME
Donald
Fooling
<?php
abstract class Foo {
// Self-referential 'abstract' declaration
const NAME = self::NAME;
}
class Fooling extends Foo {
// Overrides definition from parent class
// Without this declaration, an error will be triggered
const NAME = 'Donald';
}
$fooling = new Fooling();
echo $fooling::NAME;
A 是 ;据我所知,PHP中没有或常量,但你可以有一个解决方法:constant
constant
abstract
private
示例抽象类
abstract class Hello {
const CONSTANT_1 = 'abstract'; // Make Abstract
const CONSTANT_2 = 'abstract'; // Make Abstract
const CONSTANT_3 = 'Hello World'; // Normal Constant
function __construct() {
Enforcer::__add(__CLASS__, get_called_class());
}
}
这将运行良好
class Foo extends Hello {
const CONSTANT_1 = 'HELLO_A';
const CONSTANT_2 = 'HELLO_B';
}
new Foo();
柱将返回错误
class Bar extends Hello {
const CONSTANT_1 = 'BAR_A';
}
new Bar();
松果将返回错误
class Songo extends Hello {
}
new Songo();
执行器类
class Enforcer {
public static function __add($class, $c) {
$reflection = new ReflectionClass($class);
$constantsForced = $reflection->getConstants();
foreach ($constantsForced as $constant => $value) {
if (constant("$c::$constant") == "abstract") {
throw new Exception("Undefined $constant in " . (string) $c);
}
}
}
}