【问题标题】:Return instance of class from base class从基类返回类的实例
【发布时间】:2017-03-09 14:54:03
【问题描述】:

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

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

【问题讨论】:

  • 查询db或者使用ORM,有什么问题?

标签: php laravel class


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多