【发布时间】:2011-02-05 08:24:42
【问题描述】:
在 PHP 中,一个类如何引用自己的名字?
例如,执行此操作的方法是什么样的?
Dog::sayOwnClassName();
//echos "Dog";
更新
我看到每个人都在说get_class($this)。但这是不正确的。如果我正在创建 Dog 的 instance,那将起作用。我问的是调用 Dog 类本身的方法。如果Dog 扩展Mammal,则在Dog 类中调用get_class($this) 将返回“哺乳动物”。
换句话说:
- 我不是在问“Dog 类是什么类”,答案是“Dog 类是 Mammal 类的成员。”
- 我也不是在问“给定一个 Dog 类的实例(称为 Rover),它的类是什么?”,答案是“Dog”。
- 我要问的是,“Dog 类本身能否告诉我‘我的名字是 Dog?’”
例如:
class Mammal {
public function find_by_id($id){
$query = "SELECT * FROM " . $myclass . " WHERE `id` = " . $id;
//(etc)
return $matching_object;
}
}
class Dog extends Mammal {
//find_by_id method should know to do a SELECT from Dog table
}
更新 2
Yacoby 对get_called_class() 的建议是正确的。这是我给出的示例中它的工作原理。
class Mammal {
public function find_by_id($id){
$myclass = get_called_class();
$query = "SELECT * FROM " . $myclass . " WHERE `id` = " . $id;
//(etc)
return $matching_object;
}
}
class Dog extends Mammal {
//find_by_id knows to do a SELECT from Dog table
//and will return the correct dog object
}
【问题讨论】:
标签: php