谈谈PHP中interface的用处

谈谈PHP中interface的用处

确实,PHP 接口是有它的目的的。

它们是契约,是给其他开发人员的说明手册。然而,还是很难理解接口有什么用。

基础

接口是抽象的类,无法直接实例化,但是可被实现。

这是一个基本的例子

interface MyInterface {
    public function setName(string $name);
    public function getName();
}

class MyClass implements MyInterface {
    private $name; 

    public function setName(string $name) { 
        $this->name = $name; 
    }

    public function getName() {
        return $this->name; 
    }
}

MyClass 必须实现 setName()getName() 方法。如果你不照做,你就会遇到致命错误。

此外,接口中定义的方法的访问性必须为公开的,并且接口中不能定义类成员。

原因

开发者使用接口来描述一个或者一组类的共同行为。

但是为什么只负责封装实现而不负责处理每个类的详细信息呢?

为了解耦!

接口允许你在不更改详细信息的情况下更改实现,也就是你使用此实现的方式。

更多高级示例

任何缓存系统都需要以下功能

  • 存储 / 设置缓存中的内容
  • 获取缓存中的内容
  • 删除缓存中的内容

基于此,我们可以创建如下的缓存接口

interface CacheInterface {
    public function set(string $key, $val);
    public function get(string $key);
    public function delete(string $key);
}

以这种方式,就可以让开发者知道需要实现缓存接口,具体怎么实现,我们不需要知道。结果就是我们可以在不修改使用方式的情况下方便地切换缓存系统

因此,在不改变缓存系统在项目中的使用方式的情况下更改缓存系统是很容易的。

Symfony 示例

我们来看刚才例子的具体应用。对于 Symfony 而言,如果你想要实现任何缓存系统,最佳实践就是按照下面的方式来做

use Symfony\\Contracts\\Cache\\CacheInterface;

class MyClass {
    private $cache;
    public function __construct(CacheInterface $cache)
    {
        $this->cache = $cache;
    }
}

通过依赖注入,将缓存接口注入到我们的类中。下次我们修改缓存系统时,MyClass 类不需要做任何的改变。

多实现 VS 多继承

PHP 不支持多继承,下面这种方式是不可能的

class MyClass extends ClassX, ClassY {}

之所以不允许这样做部分原因是由于 Diamond 问题.

不过,你可以这么做

class ClassY extends ClassX {}
class MyClass extends ClassY {}

但是 ClassXClassY 可能处理不同的事情,因此使用继承没有任何意义。

如果你想要执行多种行为,那么你可以多个接口

class MyClass implements InterfaceX, InterfaceY {}

换句话说,你可以让一些类共享一部分功能而不是共享一个父类。

总结

PHP 接口是类的方法模板,这对于解耦实现及使用是非常有帮助的。

当你需要保持灵活性并确保所有开发人员都遵循一组规则时,此功能特别有用。

关于谈谈PHP中interface的用处的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/40366.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2022年6月11日 23:59
下一篇 2022年6月11日 23:59

相关推荐

  • 分析PHP下ajax跨域的解决方案之jsonp实例

    本文实例讲述了PHP下ajax跨域的解决方案之jsonp。分享给大家供大家参考,具体如下:首先要说明一下json和jsonp的区别?json是一种基于文本的数据交换方式,或者叫做描述数据的一种格式。var person = { "name&…

    2022年6月15日
    0237
  • PHP $_POST变量(数组)

    类似$_GET变量(数组),$_POST代表页面通过post方式提交过来的数据所形成的数组。 post提交数据,通常只有一种形式: <form  action=”abc.php”  method=”post” > 项目1: <input type=”text”   name=”uNa…

    2017年11月7日
    0453
  • 分享宝塔php-fpm。

    宝塔面板是一款服务器管理软件,可以方便地安装、配置和管理PHP-FPM。通过宝塔面板,您可以快速搭建一个稳定高效的PHP环境。 宝塔面板是一款非常实用的服务器管理工具,可以帮助我们轻松地安装和管理PHP扩展,下面…

    2024年6月27日
    00
  • PHP如何处理微信小程序中的session问题。

    近年来,微信小程序风靡全球,已经成为了许多企业和个人开发者的首选平台。在小程序的开发中,我们经常会遇到session问题,也就是如何在小程序中保存用户登录状态。这个问题对于网站开发者来说并不陌生,但在小程序…

    2023年6月3日
    05
  • PHP入门指南:PHP和Dart。

    PHP(Hypertext Preprocessor)是一种广泛使用的服务器端编程语言,被广泛应用于网站开发、动态网页设计以及其他WEB应用场景。而Dart则是一种新兴的编程语言,由Google于2011年推出,旨在取代JavaScript,并被广泛…

    2023年5月23日
    01
  • PHP实现图片防盗链破解操作方法【解决图片防盗链问题/反向代理】

    本文实例讲述了PHP实现图片防盗链破解操作。分享给大家供大家参考,具体如下:很多小伙伴的博客,网站都是用图床来实现的,那么现在很多稳定的图床接口都被做了防盗链处理,例如百度、阿里、京东、小米、搜狗等。所…

    2022年6月16日
    0147
  • 详解php中抓取网页内容的实例

    php中抓取网页内容的实例详解方法一:使用file_get_contents方法实现 $url = "http://news.sina.com.cn/c/nd/2016-10-23/doc-ifxwztru6951143.shtml"; $html = file_get_contents($url); //如果出现中文乱…

    2022年6月15日
    0179
  • PHP8.0中的调试工具:Blackfire

    随着网络应用的不断发展,开发人员们需要不断地学习和利用新的工具和技术以提高他们的开发效率和质量。其中,调试工具是重要的一环,它可以帮助开发人员更快地找到代码中的错误和性能问题。本文将介绍一款PHP8.0中…

    2023年5月18日
    01

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息