重複の可能性:
PHP get_class の機能
小さなORM風のクラスセットの場合、次のものがあります。
class Record {
//Implementation is simplified, details out of scope for this question.
static public function table() {
return strtolower(preg_replace('/([a-z])([A-Z])/', '$1_$2', get_class()))."s";
}
static public function find($conditions) {
//... db-selection calls go here.
var_dump(self::table());
}
}
class Payment extends Record {
}
class Order extends Record {
public $id = 12;
public function payments() {
$this->payments = Payment::find(array('order_id', $this->id, '='));
}
}
$order = new Order();
$order->payments();
#=> string(7) "records"
このコードが出力されることを期待します:
#=> string(8) "payments"
しかし、代わりに、それは印刷されrecords
ます。を試してみself::table()
ましたが、同じ結果が得られます。
コメントのいくつかの質問の後、編集 table()
は、クラスの名前をそのオブジェクトが存在するテーブルに単純にマップするOrder
メソッドです。存在しません!)。を呼び出すと、テーブルではなく、テーブルでも、テーブルでも検索されることを期待しています。orders
Payment
payments
records
Payments::find()
payments
records
orders
私は何を間違っていますか?::が定義されたクラスではなく、::が呼び出されたクラスのクラス名を取得するにはどうすればよいですか?
重要な部分はおそらくget_class()
、適切なクラス名を返すことができないことです。