谈谈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进程管理器php-fpm

    php-fpm是什么php-fpm是PHP的一个进程管理器。php下面的众多work进程皆有php-fpm进程管理器管理。php-fpm的工作原理php-fpm全名是PHP FastCGI进程管理器。php-fpm启动后会先读php.ini,然后再读相应的conf配置文件…

    2022年6月13日 PHP自学教程
    0128
  • PHP商城开发中的产品图片优化技巧

    随着电子商务的快速发展,越来越多的商家选择使用PHP开发电子商城,以实现线上线下销售的高效连接。而在开发电子商城时,一个重要的问题就是产品图片的优化。本文将介绍一些PHP商城开发中的产品图片优化技巧。图片…

    2023年5月18日
    02
  • 用PHP的FFI调用cjieba

    phpjieba_ffi使用PHP 7.4的 FFI 测试直接调用cjieba分词的动态库选用CJieba的原因是FFI使用的是C的调用约定,如果用Cpp,还得自己包装一下,然后extern C,让编译器生成标准C的动态库。碰到的问题段错误C变量没有初…

    2022年6月23日
    0124
  • (实用篇)php精确的统计在线人数的方法

    这是一个非常精确的,通过php实现统计在线人数的方法,想知道怎么实现的请耐心阅读。 <?php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinetime=600;//在线有效时间…

    2016年10月25日
    0233
  • 深入了解PHP反射API!

    PHP中的反射API就像Java中的java.lang.reflect包一样。它由一系列可以分析属性、方法和类的内置类组成。它在某些方面和对象函数相似,比如get_class_vars(),但是更加灵活,而且可以提供更多信息。反射API也可与PHP…

    2022年6月11日
    0139
  • 如何保证PHP商城代码的高质量?

    在互联网时代,电商已成为许多人进行消费的首选方式之一。为了满足日益增长的网购需求,越来越多的企业开始构建自己的电商平台。而PHP作为一种广泛应用于网页开发和互联网应用开发的语言,也成为众多电商平台的首要…

    2023年5月19日
    01
  • PHP中的Laravel框架指南。

    Laravel是一款流行的PHP Web应用程序框架,它为Web开发带来了很多便利和创新。在这篇文章中,我们将向你介绍Laravel的基础知识以及如何使用它来构建Web应用程序。Laravel的简介Laravel是一款自2011年以来不断发展壮…

    2023年5月30日
    03
  • PHP常见数组排序方法小汇总

    1.简单数组排序 sort() 函数和rsort() 函数:语法规则:bool sort(array &array [,int sort_flags] bool rsort(array &array [.int_sort_flags]参数:第一个参数是排序数组对象第二个参数是可以选的 可选值…

    2022年6月25日
    0155

联系我们

QQ:951076433

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