<?php error_reporting(E_ALL | E_STRICT); class single{ public $hash; static protected $ins = null; final protected function __construct(){ //final 能被继承,不能被重写(防止子类重写构造方法)
$this->hash = mt_rand(1,9999);
} static public function getInstance(){
if(self::$ins instanceof self){ //instanceof 判断某个对象是不是某个类的实例
return self::$ins;
}
self::$ins = new self();
return self::$ins;
}
} $s1 = single::getInstance();
$s2 = single::getInstance(); var_dump($s1);
var_dump($s2); //son类继承single类
class son extends single{
} $s1 = son::getInstance();
$s2 = son::getInstance(); var_dump($s1);
var_dump($s2);
页面输出
object(single)[1]
public 'hash' => int 9762
object(single)[1]
public 'hash' => int 9762
object(single)[1]
public 'hash' => int 9762
object(single)[1]
public 'hash' => int 9762
主要思路:
1. 保护或者私有构造函数,防止外部实例化
2. 内部开放一个公共的静态方法,负责实例化
3. 类有一个静态属性,用于存放对象
当静态属性已经存放对象时,直接 return 该对象,否则实例化该类,然后 return 对象。