Xin Xing は PHP のシングルトン パターンを一緒に解析します
実際、シングルトン パターンは今でもよく使われています。最も典型的な例と言えば、データベースを操作するクラスかもしれません。シングルトン これを行うと、リソースを大量に消費する新しい操作を避けることができます。グローバル情報を管理するためにシステムでクラスが必要な場合は、それをシングルトンとして使用することも良い方法です。これは、クラスがグローバルに有効であり、複数回インスタンス化する必要はありません。
以下は正しい呼び出しメソッドの例です:
<?phpclass Xin{ //保存该类的实例 private static $_instance; //不让外部调用该构造函数 private function __construct(){ echo "辛星加油"; } //用于获取实例,必须是静态的,否则外部无法调用 public static function get_instance(){ //如果该单例不存在,则创建它 if(!(self::$_instance instanceof self)){ self::$_instance = new self; } //返回它既可 return self::$_instance; } //不允许对象被克隆 public function __clone(){ trigger_error('Clone Denyed!',E_USER_ERROR); } //功能函数 public function xin(){ echo "调用Xin类的xin函数,辛星你好"; }}//正确的调用方式$xin = Xin::get_instance();$xin->xin();
読者はその出力を推測できると思います:
辛星加油调用Xin类的xin函数,辛星你好
オブジェクトのクローンを作成する場合、たとえば次のコード:
<?phpclass Xin{ //保存该类的实例 private static $_instance; //不让外部调用该构造函数 private function __construct(){ echo "辛星加油"; } //用于获取实例,必须是静态的,否则外部无法调用 public static function get_instance(){ //如果该单例不存在,则创建它 if(!(self::$_instance instanceof self)){ self::$_instance = new self; } //返回它既可 return self::$_instance; } //不允许对象被克隆 public function __clone(){ trigger_error('Clone Denyed!',E_USER_ERROR); } //功能函数 public function xin(){ echo "调用Xin类的xin函数,辛星你好"; }}//克隆的时候会报错的$xin = Xin::get_instance();$qian = clone $xin;
辛星加油( ! ) Fatal error: Clone Denyed! in D:\MyApp\wamp\www\err.php on line 22Call Stack