接口类

namespace Interfaces;

interface RepositoryInterface

{

public function all($columns = array('*'));

public function paginate($perPage = 15, $columns = array('*'));

public function create(array $data);

public function update(array $data, $id);

public function delete($id);

public function find($id, $columns = array('*'));

public function findBy($field, $value, $columns = array('*'));

}

抽象类

namespace Logic;

use Interfaces\RepositoryInterface;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Container\Container as App;

abstract class Repository implements RepositoryInterface{

private $app;

protected $model;

public function __construct(App $app){

$this->app = $app;

$this->makeModel();

}

abstract function model();

/**

* @param array $columns

* @return mixed

*/

public function all($columns = array('*')) {

return $this->model->get($columns);

}

/**

* @param int $perPage

* @param array $columns

* @return mixed

*/

public function paginate($perPage = 15, $columns = array('*')) {

return $this->model->paginate($perPage, $columns);

}

/**

* @param array $data

* @return mixed

*/

public function create(array $data) {

return $this->model->create($data);

}

/**

* @param array $data

* @param $id

* @param string $attribute

* @return mixed

*/

public function update(array $data, $id, $attribute="id") {

return $this->model->where($attribute, '=', $id)->update($data);

}

/**

* @param $id

* @return mixed

*/

public function delete($id) {

return $this->model->destroy($id);

}

/**

* @param $id

* @param array $columns

* @return mixed

*/

public function find($id, $columns = array('*')) {

return $this->model->find($id, $columns);

}

/**

* @param $attribute

* @param $value

* @param array $columns

* @return mixed

*/

public function findBy($attribute, $value, $columns = array('*')) {

return $this->model->where($attribute, '=', $value)->first($columns);

}

public function makeModel(){

$model = $this->app->make($this->model());

if(!$model instanceof Model)

return false;

return $this->model = $model;

}

}

继承抽象类的class A

class A extends Repository{

}

继承抽象类的class B

class B extends Repository{

}

控制器使用

class controller{

private $app;

public function __construct(RepositoryInterface $repo){

$this->app = $repo;

}

}

请问控制器中使用的接口,如果绑定到它具体实现类?

PHP抽象函数的依赖注入,laravel 抽象类实现接口,具体类继承抽象类,使用依赖注入,如何知道接口选择的是哪个具体实现类啊?...相关推荐

  1. 子类既要实现接口又要继承抽象类的一个demo

    package jiekoudemo; /** 写了一个简单的子类既要实现接口又要继承抽象类的一个demo* 继承抽象类实现接口7* class 类名 extends b implements c 的 ...

  2. java请编写公共类继承抽象类_(Java相关)怎么理解抽象类,继承和接口?

    著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:海子 来源:博客园 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的 ...

  3. java抽象类及其派生类_java抽象类

    本文指标: 1. 最基本的运用:掌握java类最简单,最核心的写法 2. 理论知识:语法角度,设计角度 3. 几种典型应用 最简单也是最核心的抽象类示例: 学习应该是一个循序渐进的过程,学java抽象 ...

  4. java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗

    一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...

  5. Python面向对象之接口类(抽象类)

    Python面向对象之接口类(抽象类):就是制定一个规范.比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方法 ...

  6. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

    前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...

  7. 为什么派生的子类报错不能实例化抽象类_一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别...

    目录 #抽象类介绍 #为什么要用抽象类 #一个抽象类小故事 #一个抽象类小游戏 #接口介绍 #接口与类相似点: #接口与类的区别: #接口特性 #抽象类和接口的区别 #接口的使用: #接口最佳实践:设 ...

  8. java实体类实现抽象类_java接口、抽象类、实体类关系介绍

    接口:接口是一个引用类型,与类相似,不过在接口中只能包含常量,方法名和嵌套类型.没有构造器,所以不能被实例化只能被类所实现或者被另外的接口所继承.在接口中声明的方法没有方法体. 抽象类:将类层次中共有 ...

  9. java抽象类数组初始化_【Java抽象类 11】

    一.抽象类 1.语法,在class关键字前边添加abstract关键字 2.抽象类无法实例化,但是抽象类中仍然有构造方法 3.抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中 4.抽象方法修饰 ...

最新文章

  1. lookup函数和vlookup_5个实用案例告诉你,为什么说Lookup函数比vlookup更简单
  2. linux启动顺序详解
  3. 证书到期什么意思_建筑资质资质证书有效期及注意事项
  4. mysql 5.7 的组复制
  5. MySQL下使用Inplace和Online方式创建索引的教程
  6. C++:02---命名空间
  7. python中的map()函数详解
  8. 关于机器学习会议的点评
  9. cfree运行程序错误的原因_ARM Cortex-M 系列 MCU错误代码自动追踪库的使用经验分享
  10. python怎么将txt转为excel_使用matlab或python将txt文件转为excel表格
  11. 【译】EntityFramework6与EntityFrameworkCore的区别
  12. c语言编程工程师基础,c语言工程师的工作是什么
  13. mysql数据库安全吗_mysql数据库的安全
  14. ANDROID高仿京东分类_类似京东分类界面源代码下载
  15. tayga nat64优化的自省揭示tun虚拟网卡的正确玩法
  16. JavaScript 中的事件类型2(读书笔记思维导图)
  17. HighCharts生成柏拉图
  18. qq聊天页面设置html,如何设置qq聊天窗口消息显示方式
  19. 【TeXstudio】【2】一般的图片和表格的表现形式
  20. 『深度应用』人脸识别最新进展及发展方向

热门文章

  1. C#LeetCode刷题之#206-反转链表(Reverse Linked List)
  2. C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
  3. 面向对象设计原则之3-里氏替换原则
  4. 如何在React Native中创建精美的动画加载器
  5. 不要解决:如何将JavaScript集合与目标相匹配
  6. SAS在金融中的应用七
  7. 超大图上的节点表征学习
  8. 2010年高教社杯全国大学生数学建模竞赛题目B题解析及层次分析法AHP在其中的应用
  9. Python编程模块里一些小众但是却比较实用的python内置库
  10. Python中的顺序表