私はいくつかのクラスを次のように設定しています。ここで、-> は「拡張」を意味します。
DBObject -> Article -> Activity
DBObject
__construct
には、データベースからオブジェクトを簡単にロードするためのジェネリックが含まれています (したがってDataBaseObject
)。
Article
__construct
特殊なコンストラクターの動作のために、this をオーバーライドします。
Activity
は、そのスーパークラス( )__construct
によって処理できるため、 を実装していません。__construct
Article::__construct
でも、なぜか電話したら
$activity = new Activity($args);
で終わりDBObject::__construct
、Article のものをまとめて渡します。サブクラスの呼び出しは、一度に 1 クラスずつサブクラスの行を上っていくものだといつも思っていました。そう思う私は間違っているのでしょうか?
編集: ここにコード スニペットがあります: http://pastebin.com/SXpSNVMm。不要なコードをすべて削除しました。私はそれを次のように呼んでいます:
$userId = 60;
$title = "TestTitle";
$contents = "Lorem ipsum dolor sit amet";
$date = 1356173771;
echo "creating new activity\n";
$a = new Activity($userId, $title, $contents, $date);
コンストラクターにエコーを配置するArticle::__construct()
と、それが使用されていないことが明らかになり、すぐにDBObject::__construct()
.
編集 2 : これは正しく動作するはずのバージョンです: http://ideone.com/VJzdI3 . テストにはPHPUnitを使用しています。これは、PHPUnit で実行した場合の出力です。
creating new activity
DBObject constructed called
QUERY: 60 ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '60' at line 1
後者は、meekrodb を使用して初期化しようとしていることを意味します。これは、または配列new
以外のものを使用して DBObject のサブクラスを呼び出した場合にのみ発生するはずです。null
ただし、Article は __construct をオーバーライドする必要があるため、最初に呼び出す必要があります。