PHPでシングルトンモードを実装する方法

coldplay.xixi
リリース: 2023-03-03 22:20:02
オリジナル
2258 人が閲覧しました

シングルトン モードを実装する

php メソッド: まず、このクラスのオブジェクトを保存する静的プライベート変数を作成します。次に、オブジェクトを直接作成するために new を使用しないようにします。次に、オブジェクトのクローンを作成するために clone を使用しないようにします。最終的に [$instance] がシングルトン オブジェクトであるかどうかを判断し、そうでない場合は作成するだけです。

PHPでシングルトンモードを実装する方法

シングルトン モードを実装するための php メソッド:

シングルトン モードの定義: クラスのインスタンスが 1 つだけであることを確認します。 、それにグローバル アクセス ポイントを提供します。

PHP はシングルトン モードを実装します:

class Singleton
{
    //创建静态私有的变量保存该类对象
    static private $instance;
    //防止使用new直接创建对象
    private function __construct(){}
    //防止使用clone克隆对象
    private function __clone(){}
    static public function getInstance()
    {
        //判断$instance是否是Singleton的对象,不是则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    public function test()
    {
        echo "我是一个单例模式";
    }
}
$sing = Singleton::getInstance();
$sing->test();
$sing2 = new Singleton(); //Fatal error: Uncaught Error: Call to private Singleton::__construct() from invalid context in
$sing3 = clone $sing; //Fatal error: Uncaught Error: Call to private Singleton::__clone() from context
ログイン後にコピー

PHP がシングルトン モードを実装することの重要性は何ですか:

意味がありません。PHP にはスレッドの概念がありません。コードはメモリ内に常駐せず、すべての変更を自分で制御できます。クラスのインスタンスが 1 つだけであることを保証する必要はありません。何がポイントですか?データベース接続クラスでシングルトン モードを使用する必要があります。一部のページが 2 つのデータベースに接続する必要がある場合はどうすればよいでしょうか?

本当に無意味なのでしょうか? ######もちろん違います。

コードを見てください:

class A
{
    public function show()
    {
        echo "我是A类函数,要调用B类函数和C类函数
"; $b = new B(); $b->show(); $c = new C(); $c->show('A'); } } class B { public function show() { echo "我是B类函数,要调用C类函数
"; $c = new C(); $c->show('B'); } } class C { public function show($parm) { echo "我是C类函数,现在被{$parm}类函数调用
"; } } $a = new A(); $a->show();
ログイン後にコピー

ここでの呼び出し中に、2 つのクラス C オブジェクトが作成されます。new は非常にリソースを消費する操作であることがわかります。ここでのクラス C が単一の In である場合、サンプル モードでは、new 1 回だけで十分です。このアイデアは問題ありませんが、通常は別のメソッドを使用してそれを実行します:

class A
{
    public function show()
    {
        echo "我是A类函数,要调用B类函数和C类函数
"; $b = Unit::getInstance('B'); $b->show(); $c = Unit::getInstance('C'); $c->show('A'); } } class B { public function show() { echo "我是B类函数,要调用C类函数
"; $c = Unit::getInstance('C'); $c->show('B'); } } class C { public function __construct() { echo "C类对象被创建
"; } public function show($parm) { echo "我是C类函数,现在被{$parm}类函数调用
"; } } class Unit { static public function getInstance($class) { static $arr = null; if (!isset($arr[$class]) || !$arr[$class] instanceof $class) { $arr[$class] = new $class(); } return $arr[$class]; } } $a = new A(); $a->show();
ログイン後にコピー

コードを実行すると、C クラスが 1 回だけインスタンス化され、その後インスタンス化されることがわかります。実際、動作中は通常、静的変数を使用してオブジェクトを保存し、シングルトン モードを偽装して実装します。

シングルトン モードと静的変数を使用してシングルトンを実装する場合の違い:

シングルトン モードでは、クラスに 1 つのオブジェクトのみの作成が強制されます。安全なインターフェースまたは統一されたインターフェースで表示されることもあります。静的変数のシングルトンを実装する目的は、主に新しい操作を減らすことですが、新しい操作やクローン操作を妨げるものではありません。

関連する学習に関する推奨事項:
php プログラミング

(ビデオ)

以上がPHPでシングルトンモードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!