<?php
abstract class F {
const id = __CLASS__;
public static function start() {
static::run(new static);
}
protected static function run(F $f) {
echo __CLASS__, PHP_EOL;
$f->dynamicRun();
}
protected function dynamicRun() {
echo self::id, PHP_EOL, get_class($this);
}
}
class S extends F {
const id = __CLASS__;
protected static function run(F $f) {
echo __CLASS__, PHP_EOL;
parent::run($f);
}
}
S::start();