ホームページ バックエンド開発 PHPチュートリアル 【デザインパターン】PHPシングルトンパターンの応用シナリオと実装

【デザインパターン】PHPシングルトンパターンの応用シナリオと実装

Jun 02, 2020 am 12:58 AM
シングルトンパターン

概要

シングルトン パターンとは何ですか?

クラスが 1 つのオブジェクト (またはインスタンス) のみを作成できる場合、このクラスはシングルトン クラスです。この設計パターンは、シングルトン デザイン パターン、または略してシングルトン パターンと呼ばれます。

シングルトンを使用する理由

  1. # リソース アクセスの競合を処理します。

    例: ログをファイルに出力する機能。

  2. # は、グローバルに一意なクラスを表します。


ビジネス概念から、一部のデータをシステム内の 1 つのコピーにのみ保存する必要がある場合は、それをシングルトン クラスとして設計する方が適しています。例: 固有の増加する ID 番号ジェネレーター。


#実装方法

PHP のシングルトンモードを実装するには 3 つの手順が必要です

* クラスを保存するために使用される静的メンバー変数。

* オブジェクトの作成または複製を防止するには、__construct と __clone をプライベートとして宣言する必要があります。

* このインスタンスにアクセスするためのパブリック静的メソッド。通常は getInstance

class single
{
    private static  $instance ;
    private function __construct(){}
    private function __clone(){}
    public static function getInstance() {
        if (empty(self::$instance)) {
            self::$instance = new single();
        }
        return self::$instance;
    }
}
ログイン後にコピー

ID を取得するメソッドをシングルトン クラスに追加します。グローバルに一意の ID 番号ジェネレーターが表示されます。

class single
{
    private  $id = 0;
    private static  $instance ;
    private function __construct(){}
    private function __clone(){}
    public static function getInstance() {
        if (empty(self::$instance)) {
            self::$instance = new single();
        }
        return self::$instance;
    }
    public function getId() {
        
        return $this->id++;
        
    }
}
ログイン後にコピー

これは本当に完璧ですが、マルチスレッドの場合はどうなるのでしょうか?

スレッドの唯一の単一インスタンスの実装


php、nts の ts バージョンと nts バージョンの違いについて言及する必要があります。 (非スレッドセーフ) シングルスレッド構造、スレッド間でキャッシュデータを共有。 ts (スレッド セーフ) はマルチスレッド機能を備えて構築されており、複数のスレッド間で異なるデータ コピーを使用します。

php の ts バージョンを使用して、スレッド セーフ モードに自動的にアップグレードします。pthreads 拡張機能は、php の ts バージョンにのみインストールできます。

pecl に含まれる pthreads の最後のバージョンは php7.0 に基づいています。github の pthreads プロジェクトも更新を停止しました。興味がある場合は、7.0 にアクセスするだけで履歴を見逃すことができます。

pthreads 拡張機能を php-7.0.9-Win32-VC14-x64 バージョンにインストールしました。

マルチスレッドの場合、シングルトンのスコープはプロセスのみからスレッドのみに変わります。

require 'single.php';
class Request extends Thread {
    public $url;
    public function __construct($url) {
        $this->url = $url;
    }
    public function run() {
        echo single::getInstance()->getId();
        echo "\n";
    }
}
$chG = new Request("www.google");
$chG ->start();
$chG->join();
echo $chG->getThreadId();
echo "\n";
$chB = new Request("www.baidu");
$chB ->start();
$chB->join();
echo $chB->getThreadId();
echo "\n";
ログイン後にコピー

ここでは 2 つのスレッドが作成されますが、0 から始まる ID は両方の実行で取得できます。これは、2 つのスレッドの単一クラスが 2 つの異なるシングルトン オブジェクトであることを示しています。


#概要

PHP のシングルトン モードを実装するには 3 つの手順が必要です

* 静的メンバー変数はクラスを保存するために使用されます。

* __construct と __clone は、作成やクローン作成を防ぐためにプライベートとして宣言されています。

* このインスタンスにアクセスするために使用される静的メソッド (通常は getInstance)。

私は PHP でマルチスレッドを使用したことがありません。それはもう後戻りできないことのようです。みんながどう思うかわかりません。

以上が【デザインパターン】PHPシングルトンパターンの応用シナリオと実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JavaScript のシングルトン パターンを理解するための 1 つの記事 JavaScript のシングルトン パターンを理解するための 1 つの記事 Apr 25, 2023 pm 07:53 PM

JS シングルトン パターンは、クラスのインスタンスが 1 つだけであることを保証する、一般的に使用される設計パターンです。このモードは主に、名前の競合や繰り返しの読み込みを避けるためにグローバル変数を管理するために使用され、メモリ使用量を削減し、コードの保守性とスケーラビリティを向上させることもできます。

C++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用 C++ 関数のオーバーロードと書き換えにおけるシングルトン モードとファクトリ モードの適用 Apr 19, 2024 pm 05:06 PM

シングルトン パターン: 関数のオーバーロードを通じて、シングルトン インスタンスにさまざまなパラメーターを提供します。ファクトリ パターン: 関数の書き換えを通じてさまざまなタイプのオブジェクトを作成し、作成プロセスを特定の製品クラスから切り離します。

PHP 入門: シングルトン パターン PHP 入門: シングルトン パターン May 20, 2023 am 08:13 AM

ソフトウェア開発では、複数のオブジェクトが同じリソースにアクセスする必要がある状況によく遭遇します。リソースの競合を回避し、プログラムの効率を向上させるために、デザイン パターンを使用できます。中でも、シングルトン パターンはオブジェクトの作成によく使用される方法で、クラスのインスタンスが 1 つだけであることを保証し、グローバル アクセスを提供します。この記事では、PHP を使用してシングルトン パターンを実装する方法を紹介し、いくつかのベスト プラクティスの提案を提供します。 1. シングルトン モードとは何ですか? シングルトン モードは、オブジェクトを作成するためによく使用される方法で、その特徴は、クラスのインスタンスが 1 つだけであることを確認し、

PHP デザイン パターン: コード エクセレンスへの道 PHP デザイン パターン: コード エクセレンスへの道 Feb 21, 2024 pm 05:30 PM

はじめに PHP デザイン パターンは、ソフトウェア開発における一般的な課題に対する実証済みのソリューションのセットです。これらのパターンに従うことで、開発者はエレガントで堅牢かつ保守しやすいコードを作成できます。これらは、開発者が SOLID 原則 (単一責任、オープン/クローズ、リスコフ置換、インターフェイスの分離、依存関係の反転) に従うのに役立ち、それによってコードの可読性、保守性、拡張性が向上します。デザイン パターンの種類 さまざまなデザイン パターンがあり、それぞれに独自の目的と利点があります。最も一般的に使用される PHP 設計パターンの一部を次に示します。 シングルトン パターン: クラスにインスタンスが 1 つだけあることを保証し、このインスタンスにグローバルにアクセスする方法を提供します。ファクトリ パターン: 正確なクラスを指定せずにオブジェクトを作成します。これにより、開発者は条件付きで次のことを行うことができます。

PHP におけるシングルトン設計パターンの概念は何ですか? PHP におけるシングルトン設計パターンの概念は何ですか? Aug 18, 2023 pm 02:25 PM

シングルトン パターンでは、クラスにインスタンスが 1 つだけ存在することが保証され、グローバル アクセス ポイントが提供されます。これにより、アプリケーション内で使用できるオブジェクトが 1 つだけになり、制御されるようになります。シングルトン パターンは、クラスのオブジェクトをインスタンス化せずに、その一意のオブジェクトに直接アクセスする方法を提供します。例<?php classdatabase{ publicstatic$connection; privatefunc

PHPフレームワークにおけるシングルトンパターンの拡張とカスタマイズ PHPフレームワークにおけるシングルトンパターンの拡張とカスタマイズ Oct 15, 2023 am 11:10 AM

PHP フレームワークにおけるシングルトン モードの拡張とカスタマイズ [はじめに] シングルトン モードは一般的な設計パターンであり、クラスがアプリケーション全体で 1 回だけインスタンス化されることが保証されます。 PHP 開発では、特にフレームワークの開発と拡張において、シングルトン パターンが広く使用されています。この記事では、PHP フレームワークでシングルトン パターンを拡張およびカスタマイズする方法を紹介し、具体的なコード例を示します。 [シングルトン パターンとは] シングルトン パターンとは、クラスがオブジェクト インスタンスを 1 つだけ持つことができ、外部から使用するためのグローバル アクセス ポイントを提供することを意味します。 PHP 開発では、パス

PHP のシングルトン モードにおけるスレッド セーフティの問題についての考え PHP のシングルトン モードにおけるスレッド セーフティの問題についての考え Oct 15, 2023 am 10:14 AM

PHP におけるシングルトン モードのスレッド セーフティの問題について考える PHP プログラミングでは、シングルトン モードは一般的に使用されるデザイン パターンであり、クラスのインスタンスが 1 つだけであることを保証し、このインスタンスにアクセスするためのグローバル アクセス ポイントを提供します。ただし、マルチスレッド環境でシングルトン パターンを使用する場合は、スレッドの安全性の問題を考慮する必要があります。シングルトン パターンの最も基本的な実装には、プライベート コンストラクター、プライベート静的変数、およびパブリック静的メソッドが含まれます。具体的なコードは次のとおりです。

PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセス PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセス Oct 15, 2023 pm 04:48 PM

PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセス はじめに: インターネットの急速な発展に伴い、分散システムは現代のソフトウェア開発においてホットなトピックとなっています。分散システムでは、スレッドの安全性は常に重要な問題です。 PHP 開発では、シングルトン パターンは一般的に使用される設計パターンであり、リソース共有とスレッド セーフの問題を効果的に解決できます。この記事では、PHP 分散システムにおけるシングルトン モードのアプリケーション シナリオとスレッド セーフティ プロセスに焦点を当て、具体的なコード例を示します。 1. シングルトンモード

See all articles