シングルトン モードを使用するクラスの静的メンバーに関していくつかの問題があります
この投稿は、2015-11-16 17:08:20 に fox_lin によって最終編集されました 次のシングルトン モード データベース クラス:
<br />class Database{<br /> static private $db;<br /><br /> private function __construct(){<br /><br /> }<br /> static function getInstance(){<br /> if(self::$db){<br /> return self::$db;<br /> }else{<br /> self::$db = new self();<br /> return self::$db;<br /> }<br /> <br /> }<br />}<br />
ログイン後にコピー
静的メソッドは非静的メンバーを呼び出すことができないという格言があります。
このクラスの定義には次の文があります: self::$db = new self(); この self() メソッドは非静的コンストラクターではないでしょうか?
それとも、「静的メソッドは非静的メンバーを呼び出すことができない」という記述は不正確ですか?先輩方、アドバイスをお願いします。
------解決策----------------------self と $this はどちらもクラス自体を参照しています
前者は静的メソッドで使用され、後者は動的 (インスタンス化されたオブジェクト) メソッドで使用されるというだけです
new はインスタンス化されたクラスであり、コンストラクターを静的にすることはできません
歴史的な理由により、E_STRICT レベルのチェックがオフになっている場合、PHP クラスは静的ではなくなることに注意してください