<?php
abstract class HiddenFactory
{
protected function __construct()
{
}
protected static function create()
{
return new static();
}
}
class B extends HiddenFactory
{}
class C extends B {
public static function create()
{
return new static();
}
}
class A extends HiddenFactory
{
protected static $recordClass = 'B';
final public static function createB()
{
$rc = static::$recordClass;
return $rc::create();
}
}
class D extends A {
protected static $recordClass = 'C';
}
echo get_class(A::createB());
echo get_class(D::createB());
echo get_class(C::create());