/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/
class single{
private $num=null;
static private $ins=null;
protected function __construct(){
$this->num=mt_rand(1,99999);
}
static public function getnum(){
if(self::$ins instanceof self){
return self::$ins;
}
self::$ins=new self();
return self::$ins;
}
}
$s1=single::getnum();
$s2=single::getnum();
print_r($s1);
print_r($s2);
此时$s1与$s2将是同一个对象
这样可以完成简单的单例模式,但是当出现子类继承是,如果在子类中重写了构造函数,
而$s1,$s2为子类的两个对象,此时将不能完成单例模式,所以在子类中不能够重写构造函数,为了防止子类中构造函数的重写,将在父类构造函数前加final(最终的),
在php中final可以修饰类和方法,但是不能修饰属性,这一点与java不同
修饰类时,则类将不能被继承,修饰方法时,方法可以被继承,但是不能重写,如下列:
class s{
private $num=null;
static private $ins=null;
final protected function __construct(){
$this->num=mt_rand(1,99999);
}
static public function getnum(){
if(self::$ins instanceof self){
return self::$ins;
}
self::$ins=new self();
return self::$ins;
}
}
class t extends s{
}
$s1=t::getnum();
$s2=t::getnum();
print_r($s1);
print_r($s2);
浙公网安备 33010602011771号