从基类返回类的实例

时间:2017-03-09 14:54:04

标签: php laravel class

我想像这样创建一个对象:

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处理对象的方式)

1 个答案:

答案 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);

$ obj

的var_dump
object(Obj)#1 (1) {
  ["id":"Obj":private]=>
  int(1)
}