PHP面向对象-接口的理解

我们应尽量面向接口写代码,而不是面向某个类写代码

  • 接口与抽象类的一些要点
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();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容