この目的を達成するには、プロジェクト全体のインスタンスが 1 つだけであることを確認し、グローバル アクセスのためのアクセス ポイントを提供する必要があります。これには、このクラスの共有静的メソッドを呼び出してこのインスタンスにアクセスする必要があります。つまり、このクラスはクラスの外部ではインスタンス化できませんが、クラス内でのみインスタンス化でき、インスタンスは共有静的メソッドを通じてのみ呼び出すことができます。
最近、『PHP Advanced Programming, Patterns, Frameworks and Testing』という本を読んでいて、たくさんの洞察が得られましたので、それを皆さんと共有したいと思います。
プロジェクトに取り組むとき、私たちは通常、共有構成クラス、テンプレート操作クラス、データベース接続などの特定のクラスの 1 つのインスタンスで十分であることを望みます。これらのクラスは、複数回インスタンス化される場合、プロジェクト開発全体で共通です。 、リソースを占有します。この目的を達成するには、プロジェクト全体のインスタンスが 1 つだけであることを確認し、グローバル アクセスのためのアクセス ポイントを提供する必要があります。これには、このクラスの共有静的メソッドを呼び出してこのインスタンスにアクセスする必要があります。つまり、このクラスはクラスの外部ではインスタンス化できませんが、クラス内でのみインスタンス化でき、インスタンスは共有静的メソッドを通じてのみ呼び出すことができます。
それでは、このクラスが外部でインスタンス化されないようにするにはどうすればよいでしょうか?このシングルトン クラスには、コンストラクター __construct があり、それを private に設定する必要があります (__construct がすでに存在するため、デフォルトの構築方法は考慮されません。クラス名を直接使用する方法)。これにより、外部で直接使用されないようにすることができます。 .インスタンス化!同時に、このクラスのインスタンスを保存するための静的メソッド変数と、このインスタンスにアクセスするための共有静的メソッド変数も宣言する必要があります (共有する必要があるため、共有コード領域を格納するために静的と宣言されています)想い出)。また、クローンが作成されないように、空のプライベート __clone() メソッドを作成する必要があります。
非常に典型的なシングルトン クラスは次のとおりです:
コードをコピー | |
{
/** |
。
http://www.bkjia.com/PHPjc/628959.html