PHP抽象函数的依赖注入,laravel 抽象类实现接口,具体类继承抽象类,使用依赖注入,如何知道接口选择的是哪个具体实现类啊?...
接口类
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 抽象类实现接口,具体类继承抽象类,使用依赖注入,如何知道接口选择的是哪个具体实现类啊?...相关推荐
- 子类既要实现接口又要继承抽象类的一个demo
package jiekoudemo; /** 写了一个简单的子类既要实现接口又要继承抽象类的一个demo* 继承抽象类实现接口7* class 类名 extends b implements c 的 ...
- java请编写公共类继承抽象类_(Java相关)怎么理解抽象类,继承和接口?
著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:海子 来源:博客园 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的 ...
- java抽象类及其派生类_java抽象类
本文指标: 1. 最基本的运用:掌握java类最简单,最核心的写法 2. 理论知识:语法角度,设计角度 3. 几种典型应用 最简单也是最核心的抽象类示例: 学习应该是一个循序渐进的过程,学java抽象 ...
- java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...
- Python面向对象之接口类(抽象类)
Python面向对象之接口类(抽象类):就是制定一个规范.比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方法 ...
- Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)
前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...
- 为什么派生的子类报错不能实例化抽象类_一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别...
目录 #抽象类介绍 #为什么要用抽象类 #一个抽象类小故事 #一个抽象类小游戏 #接口介绍 #接口与类相似点: #接口与类的区别: #接口特性 #抽象类和接口的区别 #接口的使用: #接口最佳实践:设 ...
- java实体类实现抽象类_java接口、抽象类、实体类关系介绍
接口:接口是一个引用类型,与类相似,不过在接口中只能包含常量,方法名和嵌套类型.没有构造器,所以不能被实例化只能被类所实现或者被另外的接口所继承.在接口中声明的方法没有方法体. 抽象类:将类层次中共有 ...
- java抽象类数组初始化_【Java抽象类 11】
一.抽象类 1.语法,在class关键字前边添加abstract关键字 2.抽象类无法实例化,但是抽象类中仍然有构造方法 3.抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中 4.抽象方法修饰 ...
最新文章
- lookup函数和vlookup_5个实用案例告诉你,为什么说Lookup函数比vlookup更简单
- linux启动顺序详解
- 证书到期什么意思_建筑资质资质证书有效期及注意事项
- mysql 5.7 的组复制
- MySQL下使用Inplace和Online方式创建索引的教程
- C++:02---命名空间
- python中的map()函数详解
- 关于机器学习会议的点评
- cfree运行程序错误的原因_ARM Cortex-M 系列 MCU错误代码自动追踪库的使用经验分享
- python怎么将txt转为excel_使用matlab或python将txt文件转为excel表格
- 【译】EntityFramework6与EntityFrameworkCore的区别
- c语言编程工程师基础,c语言工程师的工作是什么
- mysql数据库安全吗_mysql数据库的安全
- ANDROID高仿京东分类_类似京东分类界面源代码下载
- tayga nat64优化的自省揭示tun虚拟网卡的正确玩法
- JavaScript 中的事件类型2(读书笔记思维导图)
- HighCharts生成柏拉图
- qq聊天页面设置html,如何设置qq聊天窗口消息显示方式
- 【TeXstudio】【2】一般的图片和表格的表现形式
- 『深度应用』人脸识别最新进展及发展方向