- 参考视频接口(interface)的理解
我们应尽量面向接口写代码,而不是面向某个类写代码
- 接口与抽象类的一些要点
1.接口中的每个方法,继承类里面都要去实现
2.接口中的方法后面不要跟大口号{},因为接口只是定义需要有这个函数,并不是自己去实现
3.抽象类中 abstract 的方法,继承类里面都要去实现,也可以理解成接口中的每个方法都是 abstract 方法
4.抽象方法中没有abstract 的方法,继承类不必非要写那个方法
举例,场景:我们在记录日志的时候,有时候可能需要写入文件,有时候可能写入数据库
这时候,我们可以写一个Log
接口,定义需要的方法
然后分别写一个FileLog
类和一个DatabaseLog
类
然后我们写一个UsersController
类做一个依赖注入,这样我们需要使用哪种方式写日志,实例化的时候,注入哪种类即可
<?php
// 定义接口
interface Log{
public function save($message);
}
// 稳健型日志
class FileLog implements Log{
public function save($message){
var_dump('log into file'.$message);
}
}
// 数据库型日志
class DatabaseLog implements Log{
public function save($message){
var_dump('log into database'.$message);
}
}
//自定义类实现接口
class UsersController{
protected $log;
public function __construct(Log $log)
{
$this->log = $log;
}
public function register(){
$name= 'long';
$this->log->save($name);
}
}
//$controller = new UsersController(new DatabaseLog());
//string(21) "log into databaselong"
$controller = new UsersController(new FileLog());
//string(17) "log into filelong"
$controller->register();