PHP之單例模式(職責模式)

高洛峰
發布: 2023-03-05 15:56:02
原創
1353 人瀏覽過

簡單的說,一個物件(在學習設計模式之前,需要比較了解物件導向思想)只負責一個特定的任務;

單例類別:

1、建構子需要標記為private(存取控制:防止外部程式碼使用new操作符建立物件),單例類別不能在其他類別中實例化,只能被其自身實例化;

2、擁有一個保存類別的實例的靜態成員變數

3、擁有一個存取這個實例的公共的靜態方法(常用getInstance()方法進行實例化單例類,透過instanceof操作符可以偵測到類別是否已被實例化)

另外,需要建立__clone()方法防止物件被複製(克隆)

<?php
/**
 * Created by PhpStorm.
 * User:
 * Date: 2017/1/2
 * Time: 下午3:32
 */

class Single {
    //保存实例的私有静态实例变量
    private static $instance;

    //private标记的构造方法,方式通过其他方式实例化
    private function __construct() {
        echo "this is construct function";
    }

    //创建clone方法防止被克隆
    public function __clone() {
        trigger_error("Clone is not allowed ", E_USER_ERROR);
    }

    //单例方法,用户访问实例的公共静态方法
    public static function shareInstance() {
        //instanceof:判断instance是不是self的实例或者子类
        if (!(self::$instance instanceof self)){
            self::$instance = new self();
        }
        return self::$instance;
    }
}
登入後複製
登入後複製

trigger_error() 函數建立使用者層級的錯誤訊息。

trigger_error() 函數能結合內建的錯誤處理器所關聯,或者可以使用使用者定義的函數作為新的錯誤處理程序(set_error_handler())。

trigger_error(errormsg,errortype);
登入後複製
登入後複製
參數 描述
errormsg 必需。規定錯誤訊息。最大長度 1024 位元組。
errortype 可選。規定錯誤類型。可能的值:E_USER_ERRORE_USER_WARNINGE_USER_NOTICE(預設)


簡單的說,一個物件(在學習設計模式之前,需要比較了解一個物件導向

1、建構子需要標記為private(存取控制:防止外部程式碼使用new運算元建立物件),單例類別不能在其他類別中實例化,只能被其自身實例化;

2、擁有一個保存類別的實例的靜態成員變數

3、擁有一個存取這個實例的公共的靜態方法(常用getInstance()方法進行實例化單例類,透過instanceof操作符可以偵測到類別是否已經被實例化)

另外,需要建立__clone()方法防止物件被複製(複製)

<?php
/**
 * Created by PhpStorm.
 * User:
 * Date: 2017/1/2
 * Time: 下午3:32
 */

class Single {
    //保存实例的私有静态实例变量
    private static $instance;

    //private标记的构造方法,方式通过其他方式实例化
    private function __construct() {
        echo "this is construct function";
    }

    //创建clone方法防止被克隆
    public function __clone() {
        trigger_error("Clone is not allowed ", E_USER_ERROR);
    }

    //单例方法,用户访问实例的公共静态方法
    public static function shareInstance() {
        //instanceof:判断instance是不是self的实例或者子类
        if (!(self::$instance instanceof self)){
            self::$instance = new self();
        }
        return self::$instance;
    }
}
登入後複製
登入後複製

trigger_error()

函數建立使用者層級的錯誤訊息。

trigger_error()

函數能結合內建的錯誤處理器所關聯,或者可以使用使用者定義的函數作為新的錯誤處理程序(set_error_handler())。

trigger_error(errormsg,errortype);
登入後複製
登入後複製
參數描述errormsgerrortype
必需。規定錯誤訊息。最大長度 1024 位元組。
可選。規定錯誤類型。可能的值:E_USER_ERRORE_USER_WARNINGE_USER_NOTICE(預設)
更多PHP之單例模式(職責模式)相關文章請關注PHP中文網!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!