何ていえばいいのこのパターン

<?php

abstract class CtorProxy
{
    protected function __construct()
    {
        $args = func_get_args();
        call_user_func_array(array($this, '_ctor'), $args);
    }

    protected function _ctor()
    {
        // should be overridden.
    }
}

class PublicClass extends CtorProxy
{
    public function __construct() { echo __METHOD__; }
    public function getProtectedClass() { return new ProtectedClass(); }
}

class ProtectedClass extends CtorProxy
{
    protected function _ctor() { echo __METHOD__; }
}
<?php

$publicClass = new PublicClass(); // PublicClass::__construct
$protectedClass = $publicClass->getProtectedClass(); // ProtectedClass::_ctor

$protectedClass = new ProtectedClass(); // fatal error

オブジェクトの生成を制限しまくりたい私にとって、結構有難い。
どっかで既にありそうなパターンなんだけど、何ていう名前なんだろう。