可能重复:
PHP get_class 的功能
对于一个小的 ORM-ish 类集,我有以下内容:
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
。
我究竟做错了什么?如何获取调用 ::is 的类的类名,而不是定义 is 的类?
重要的部分可能是get_class()
,无法返回正确的类名。