/**
燕十八 公益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);

posted on 2012-11-22 20:55  猎人k  阅读(129)  评论(0)    收藏  举报