我想像这样创建一个对象:
class Obj extends BaseModel {
public function doSomething() {
// do some stuff with the instance
}
}
class BaseModel {
public static function find($id){
// retrieve object from database and return instance of Obj class
}
}
所以我可以实现以下目标:
$obj1 = Obj::find(1);
$obj1->doSomething();
如何创建它以便基类中的静态方法返回Obj类的实例?
(类似于Laravel处理对象的方式)
答案 0 :(得分:1)
在您的基础模型中,您可以使用get_called_class获取已调用的孩子的班级。
class Obj extends Base{
private $id;
public function __construct($id){
$this->id = $id;
}
public function getId(){
return $id;
}
}
class Base{
public static function find($id){
$class = get_called_class();
return new $class($id);
}
}
$obj = Obj::find(1);
object(Obj)#1 (1) {
["id":"Obj":private]=>
int(1)
}