请问如下代码中$oa = Single::getinstance();这句就相当于实例化吗?为什么可以直接使用Single::getinstance();就可以访问这个类中的方法?谢谢
class Single{
private $name;
private function __construct(){
}
static public $instance;
static public function getinstance(){
if(!self::$instance) self::$instance = new self();
return self::$instance;
}
public function setname($n){
$this->name = $n;
}
public function getname(){
return $this->name;
}
}
$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();
echo '<br/>';
echo $ob->getname();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为 getInstance方法里通过
new self()
将自身实例化并作为返回值返回。静态方法getInstance()里面其实写得很清楚,当你静态调用getInstance()时,他会负责去判断是否存在当前对象,如果不存在,会自动帮你创建。
if(!self::$instance) self::$instance = new self();
最后将对象句柄返回给你用static修饰后的成员属性不归类的实例化对象所有,而是归类本身所有。