3

次のPHPコードについて考えてみます。

<?php
require_once("myDBclass.php");
class a {
    private $tablename;
    private $column;
    function __construct($tableName, $column) {
        $this->tableName = $tablename;
        $this->column = $column;        
    }

    function insert() {
        global $db;
        $db->query("INSERT INTO ".$this->tableName." (".$this->column.") VALUES (1)");  
    }       
}

class x extends a {
    function __construct() {
        parent::construct("x", "colX"); 
    }
}

class y extends a {
    function __construct() {
        parent::construct("y", "colY"); 
    }
}
?>

別のファイルでインスタンス化された$dbオブジェクトがありますが、クラス "a"で新しい関数を定義するたびに、globalキーワードを使用せずに、これをクラスaの関数に渡したいと考えています。

クラスXとYをインスタンス化するときにDBオブジェクトを渡し、それをクラスAに渡すことでこれを実行できることはわかっていますが(現在、テーブル名と列で行っているように)、クラスを何回拡張できるかわかりません。 Aそしてどういうわけか別のもっと簡単な方法があるに違いないと思った。

これを達成するために私が検討できるより良い解決策を誰かが知っていますか?

前もって感謝します

4

2 に答える 2

2

PHPの静的プロパティを使用できます。

class A {
    static $db;
    public static function setDB($db) {
        self::$db = $db;
    }
}

これで、そのプロパティはそのオブジェクトとその子のすべてのインスタンスで共有されます。

于 2010-09-02T22:59:57.787 に答える
1

シングルトンデザインパターンを調べます。globalsあなたはそれが必要ではないことを知っているように見えるので、あなたは使用する必要がないはずです。

于 2010-09-02T22:59:40.830 に答える