我一直在寻找一种方法来调用类的构造函数,类似于“parent :: _ construct”,但对于类本身(类似“self :: _ construct”,虽然这不起作用).为什么这样?考虑以下(不起作用,顺便说一下)……
class A {
var $name;
function __construct($name) {
$this->name = $name;
}
function getClone($name) {
$newObj = self::__construct($name);
return $newObj;
}
}
class B extends A {
}
在实际实现中,还有其他属性可以区分B类和A类,但两者都应该具有“getClone”方法.如果在类A的对象上调用它应该产生另一个类A的对象,并且如果在类B上调用它应该产生另一个类B的对象.
当然,我可以通过重写B类中的“getClone”并将类名硬编码到方法中来实现这一点(即$newObj = new B($name)),但是编写方法会更好.一次,告诉它实例化一个自己类的对象,无论该类是什么.
PHP会让我这样做吗?
解决方法:
您可以使用
$clsName = get_class($this);
return new $clsName();
但是niko的解决方案也适用于单例模式http://php.net/manual/en/language.oop5.static.php
从php 5.3开始,您可以使用static关键字的新功能.
<?php
abstract class Singleton {
protected static $_instance = NULL;
/**
* Prevent direct object creation
*/
final private function __construct() { }
/**
* Prevent object cloning
*/
final private function __clone() { }
/**
* Returns new or existing Singleton instance
* @return Singleton
*/
final public static function getInstance(){
if( static::$_instance == null){
static::$_instance = new static();
}
return static::$_instance;
}
}
?>