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