Я уже читал Why does PHP 5.2+ disallow abstract static class methods? и How to force an implementation of a protected static function - второй очень похож на мой случай - но я все еще не отвечаю. В принципе, я хочу заверить, что каждый ребенок моего абстрактного класса реализует защищенный статический метод, не реализуя его, поскольку это не имеет смысла и из-за отсутствия в нем ключевой информации. Кроме того, он должен быть статичным (поскольку метод вызывающего объекта является статическим и не имеет контекста) и защищен (поэтому я не могу использовать интерфейс, и я не хочу, чтобы кто-либо вызывал его напрямую), и он будет вызван поздней статической привязкой. Есть идеи?Есть ли способ для абстрактного защищенного статического метода в PHP для последующего наследования?
пустышка коды ниже, чтобы осветить мой случай:
abstract class BaseClass {
public static function foo() {
// some common stuff
static::bar();
// rest of common stuff
}
public function whoooaaa($condition) {
if ($condition) {
AClass::foo();
} else {
BClass::foo();
}
}
}
class AClass extends BaseClass {
protected static function bar() {
// do something
}
}
class BClass extends BaseClass {
protected static function bar() {
// do something else
}
}
// end somewhere else in my code, two constructions, both used:
AClass::foo();
// ....
$baseClassInheritedInstance->whoooaaa($variableCondition);
Моего единственным решением, уродливый, чтобы реализовать фиктивный защищенный статический метод в базовом классе и бросить родовое исключение, так что он должен быть реализован по наследству ,
Пример очень манекена, очевидно, строительство, мне нужно использовать очень сложный, например, общий код в BaseClass :: Foo содержит некоторые циклы и условия, так что не существует простого способа, чтобы реорганизовать его. –
Кроме того, в большинстве случаев я хотел бы использовать BaseClass :: foo или static equivallent BaseClass :: whoooaaa, чтобы играть с наследованием статическим способом для сокращения;) –
Реальный вопрос: почему в названии Goku вы создаете статическое отношение наследования? Разве нет лучшего способа сделать это? –