ホームページ バックエンド開発 PHPチュートリアル PHP_PHP チュートリアルでシングルトン モードを実装する最も安全な方法

PHP_PHP チュートリアルでシングルトン モードを実装する最も安全な方法

Jul 13, 2016 am 10:28 AM
php シングルトンパターン

一般的に使用されるデザインパターンとして、シングルトンパターンが広く使用されています。では、シングルトンを設計する最良の方法は何でしょうか?

通常は次のように書きます。インターネットで見つかる例のほとんどは次のようなものです:

コードをコピーします コードは次のとおりです:

class A
{
protected static $_instance = null;
protected function __construct( ;
self: :$_instance = new self();
return self::$_
$a = A::getInstance();
$b = B::getInstance();
var_dump($a === $b);

このクラスがプライベートにならないように、__construct メソッドをプライベートとして設定します。他のものはインスタンス化されます。しかし、この書き方の明らかな問題は、コードを再利用できないことです。たとえば、A を 1 つずつ継承します。



コードをコピーします。 コードは次のとおりです。


class B extends A
{
protected static $_instance = null;
}
$a = A::getInstance();

$b = B::getInstance();
var_dump($a === $b);

上記のコードは出力します:

コードをコピーします コードは次のとおりです:
bool(true)

問題は self にあります。つまり、A が B を継承しても、その自己参照は依然として を指します。 A.この問題を解決するために、PHP 5.3 では後期静的バインディング機能が導入されました。簡単に言えば、静的メソッドまたは変数は static キーワードを介してアクセスされます。self とは異なり、静的参照は実行時に決定されます。したがって、シングルトン モードを再利用できるようにコードを書き直すだけです。

コードをコピーします

コードは次のとおりです:



class C{ protected static $_instance = null; protected function __construct() {
}
protected function __clone()
{
//クローンを許可しない
}
public function getInstance() { if (static::$_instance === null) { static::$ _instance = new static; }
return static::$_instance;
);var_dump($c) === $d);


上記のコード出力:


コードをコピー


コードは次のとおりです:


bool(false)

このように、$_instance 変数を継承して再初期化するだけで、シングルトン パターンを実装できます。上記のメソッドは PHP 5.3 でのみ使用できることに注意してください。PHP の以前のバージョンでは、シングルトン クラスごとに getInstance() メソッドを作成することをお勧めします。

PHP のシングルトン モードには Java と同じスレッド セーフティの問題はありませんが、ステートフル クラスにシングルトン モードを使用する場合は注意が必要であることに注意してください。シングルトン モード クラスは、PHP 実行のライフサイクル全体に伴い、メモリのオーバーヘッドにもなります。




http://www.bkjia.com/PHPjc/802220.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/802220.html


技術記事
一般的な設計パターンとしては、シングルトンパターンが広く使われています。では、シングルトンを設計する最良の方法は何でしょうか? 通常、私たちはこのように書きます。オンラインで見つかる例のほとんどは...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles