PHPオブジェクト指向におけるシングルトンと静的メソッドの比較とクラス自動ローディングの分析

PHP中文网
リリース: 2016-08-08 09:32:38
オリジナル
1205 人が閲覧しました

静的メソッド:

class A{
	public static function a(){
		# code ...
	}
	public static function b(){
		# code ...
	}
}
// 使用
A::a();
A::b();
ログイン後にコピー


スクリプトが解釈されると、静的メソッドはメモリにロードされます (そして単一コピーされます)。関数のように使えます。

単一のケース:

クラスのコピーが 1 つだけメモリに保存されることを実現するために、静的変数を使用したコードを通じてデザイン パターンが実装されます

class Container(){
	protected static $loadedSingletonClasses = [];
	public static function loadSingletonClass($className=''){
		if(!isset(self::$loadSingletonClass[$className])){
			self::$loadSingletonClass[$className] = new $className;
		}
		return self::$loadSingletonClass[$className];
	}
}
$a = Container::loadSingletonClass("foo\bar\MyClass");
$b = Container::loadSingletonClass("foo\bar\MyClass");
ログイン後にコピー


$a $b上記のコード内の変数は同じメモリ アドレスを指します (ただし、これら 2 つの変数によってインスタンス化されたクラスのデストラクターをトリガーしたい場合は、両方の変数を破棄する必要があります。詳細については、PHP オブジェクト指向の知識の概要を参照してください)。

シングルトンと静的メソッドの違いは、静的メソッドはスクリプトの解釈時にメモリにロードされるのに対し、シングルトンは新規作成時にのみメモリにロードされることです (両方のコードがメモリ コード領域にロードされている場合)

自動ロード:

自動ロードの説明があります(PHPでのautoloadの実装メカニズム)

クラスをインスタンス化するとき、新しいクラスを

静的メソッドCLASS::func()を呼び出します

継承されたクラスとInterfaces subClass extendsparentClass{}

この時点で、自動ロード関数がトリガーされます:

use を使用してクラスのエイリアスを作成する場合、渡されるクラス名はエイリアスの前のクラスでもあります

上記ではシングルトンとPHP におけるオブジェクト指向 静的メソッドの比較と自動クラスローディングの分析 (コンテンツの側面を含む) 詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

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