duanpendan8067 2017-03-09 14:54
浏览 38
已采纳

从基类返回类的实例

I'd like to create an object like so:

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
    }
}

So i can achieve the following:

$obj1 = Obj::find(1);
$obj1->doSomething();

How can I create this so that the static method from the base class returns an instance of the Obj class?

(similar to how Laravel handles objects)

  • 写回答

1条回答 默认 最新

  • doucai6663 2017-03-09 14:57
    关注

    In your base model, you can get the class of the children that's been called with 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);
        }
    
    }
    

    Example

    $obj = Obj::find(1);
    

    var_dump of $obj

    object(Obj)#1 (1) {
      ["id":"Obj":private]=>
      int(1)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解