我想为框架提供的类型添加一些功能,但这种类型是singleton
.
因此,它的构造函数是 private。我的课应该singleton
也是,但我不知道如何初始化它。我无法更改原始课程的代码。
现在我不扩展,只保留一个在 my 中初始化的私有属性getInstance
,并使用 __call(),但使用起来不够直观。我无法将我的对象传递给预期的原始类。
您需要将扩展类中的构造函数保持为私有。但是,您可以执行以下操作:
class originalClass
{
private function __construct()
{
/* Do something */
}
public static function init()
{
self::__construct();
}
}
class extendedClass extends originalClass
{
private function __construct()
{
parent::init();
}
public static function init()
{
self::__construct();
}
}
$var = extendedClass::init();
或者,您可以选择将您的类作为独立类,并使用魔术方法访问“父”对象:
class pdoExtender
{
private $someProperty;
public function __construct()
{
$this->someProperty = new PDO(...);
}
public function __call($name, $args)
{
if(method_exists(array($this, $someProperty), $name))
{
return call_user_func_array(array($this, $someProperty), $args);
}
}
}
// Example function calls:
$db = new pdoExtender;
// As (obj)pdoExtender doesn't have the method 'prepare()', the __call() method is invoked to check the 'parent' object, PDO
$db->prepare();