<table cellspacing="0" cellpadding="0"> <tr> <td class="t_f" id="postmessage_52885"> 派生クラス データベースの単純な関心モード <div class="blockcode"> <div id="code_cZe"><ol> <li><?php<li>//解決すべき問題は、1 つのメソッドでクラスを複数回呼び出すことです <li>//同じ親クラスへの複数回の呼び出し <li>class Pdoo {<li> public function __construct(){}<li> //これはデータベースクラスです<li> function select($name) {<li> echo "authentic" . $name;<li> }<li>}<li>class Conn {<li> static $db;<li> private function __construct() {<li> <li> }<li> <li> private function __clone( ) {<li> <li> }<li> //Base クラスの代わりにデータベース接続を返します<li> public static function getInstance() {<li> if (self::$db == null) {<li> self::$db = new Pdoo ( );<li> }<li> return self::$db;<li> }<li> <li> //このメソッドは無効です<li> function select($name) {<li> echo $name;<li> }<li><li>}<li>class Db {<li> static $db; static $instanceInternalCache;<li> private function __construct() {<li> //初期化はデータベースへの接続とは関係ありません<li> }<li> <li> private function __clone() {<li> }<li> //ここではインスタンス化できません<li> public static function getDb( ) {<li> <li> }<li> //ここでの解決策は、A が同じメソッド内で複数回呼び出された場合、複数回インスタンス化されないということです<li> // 複数の派生クラスがインスタンス化される、つまり、多数の派生クラスがインスタンス化されることは解決できません派生クラスのデータベースは何度でも接続されます <li> public static function getInstance($model) {<li> if (self::$instanceInternalCache [$model] == NULL) {<li> self::$instanceInternalCache [$model] = new $model ( );<li> }<li> <li> return self ::$instanceInternalCache [$model];<li> }<li> <li> function select($name) {<li> Conn::getInstance ()->select ( $name );<li> }<li>}<li><li> class A extends Db {<li> <li> function s($name) {<li> $this->select($name);</li> <li> }</li> <li> </li> <li> public static function instance() {</li> <li> returnparent::getInstance ( __CLASS__ );</li> <li> }</li> <li> }</li> <li> <li>class B extends Db { </li> <li> </li> <li> function s($name) {</li> <li> $this->select($name);</li> <li> }</li> <li> public static function instance() {</li> <li> returnparent::getInstance ( __CLASS__ );</li> <li> }</li> <li>}</li> <li>class Main {</li> <li> </li> <li> public function t() {</li> <li> A::instance ()->select ( "1" );</li> <li> A::instance ()->select ( "11" );</li> <li> </li> <li> B::instance ()- >select ( "2" );</li> <li> </li> <li> }</li> <li>}</li> <li>$t = new Main ();</li> <li>$t->t ();</li> <li> </ol></div>コードをコピー<em onclick="copycode($('code_cZe'));"></em> </div> </td> </tr> </table> <div id="comment_52885" class="cm"> </div> <div id="post_rate_div_52885"> </div> <br>