私は、データベースクラスを継承する親クラス(遅延静的バインディングを使用)を作成しました。私は子クラスのパブリックプロパティとして各テーブルの列を割り当てるコンストラクタを記述しようとしています。これまで私は子クラスでコンストラクタを書くことができましたが、うまく動作しますが、すべての子クラスのプロパティが自動的に定義されるように親クラスに入れたいと思います。親クラスを介して呼び出されるクラスプロパティを定義する
class Sale extends DatabaseObject {
protected static $table_name="invoices";
protected static $db_fields = array();
function __construct() {
global $database;
$query_cols = " SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_NAME LIKE '" . self::$table_name . "' AND TABLE_SCHEMA LIKE '" . DB_NAME . "' ORDER BY ORDINAL_POSITION ASC";
$cols = $database->query($query_cols);
while($col = $database->fetch_array($cols)) {
if(!property_exists($this,$col['COLUMN_NAME'])) {
$this->$col['COLUMN_NAME']=NULL;
array_push(self::$db_fields,$col['COLUMN_NAME']);
}
}
}
}
私はと呼ばれるクラスのプロパティを定義できるようにする必要があり、親でこのコンストラクタを使用するには: はここに私の子クラスです。事前に
function __construct() {
$class_name = get_called_class();
$query_cols = " SELECT COLUMN_NAME FROM information_schema WHERE TABLE_NAME LIKE '" . static::$table_name . "' AND TABLE_SCHEMA LIKE '" . DB_NAME . "'";
$query_cols .= " ORDER BY ORDINAL_POSITION ASC";
$cols = $database->query($query_cols);
while($col = $database->fetch_array($cols)) {
if(!property_exists($class_name,$col['COLUMN_NAME'])) {
// the code to define called class public property?!
}
}
}
感謝。
クラスのパブリックメンバーはどうですか?静的メンバーの場合は「静的」を使用しますが、一般メンバーはどうですか?どのように私はそれを適用できますか? – MehdiK
静的およびパブリックは相互に排他的ではなく、メンバーはパブリック、保護またはプライベート、静的または非静的のいずれでもかまいません。非スタティックメンバの場合は、 '$ this'(または別の変数参照)を使ってアクセスするので、' self'、 'static'などの必要はありません。 – Stephen
ありがとうございます '$ this'問題を解決しました! – MehdiK