最新消息:周一至周五21:30分QQ群(161510483)直播,零基础免费学谷歌SEO,WEB前端,PHP入门教程

第十四节:PHP对象接口

PHP面向对象编程基础 林雍岷 40浏览

对象接口,可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。正如我们之前所看到的那样,对抽象类有一定的益处,这是在类之间共享可重用代码的好方法,可重用代码是很好的,因为它可以避免创建重复代码。接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

对象接口-简要概述

接口中定义的所有方法都必须是公有,这是接口的特性。可以这么去理解一个接口基本上是一个合同,接口会告诉你在每个遵守该合同的类中应该出现哪些方法。对象接口是一个很好的工具,可以帮助你将你的类与其他应用程序分开。这就是面向对象编程的真正力量所在!

我想在我们的Jiexi应用程序中显示Posts,这些Posts必须存储在某个仓库的某个地方,例如数据库,rss feed,或者php数组,Jiexi应用程序不必担心这些posts来自哪里或者他们如何被检索,数据仓库像一个黑匣子,只需输入一些参数,它将返回一个响应。应用程序的其余部分并不知道黑匣子里面发生了什么,这很好,因为我们可以根据需要更改黑匣子里面的工作。只要它可以输入相同的参数,并收到相同类型的响应,我们的应用程序不会中断,这就是这个合同的目的。

对象接口-实例演示

对象接口-实例演示

对象接口-实例演示

在App文件夹下面创建一个Repositories文件夹,有两个文件分别是posts.json和posts.xml:

posts.json

posts.xml

在Repositories文件夹,我们创建数据处理类PostRepositoryInterface.php,现在我们所有的接口需要做的是指定应用程序哪些方法能够使用,当处理一个类的时候,实现这个接口,使用implements操作符。首先我们需要设置一个namespace是Jiexi\App\Repositories,然后我们再创建一个接口:

现在让我们返回到index.php:

浏览器访问index.php报错:

如果你没有定义合约里面所有的方法,就会报错,我们JSON类需要在我们的interface定义这两种方法,事实上这些方法甚至需要接受与合同中相同的参数。

下一步采取这两种方法并定义PostJsonRepository.php它们,创建一个公共函数叫All和Find,find要用$id参数,我们还需要在这些方法中写一些逻辑代码,这个文件叫postjsonrepository,我们将专门处理post.json数据文件,我们将构建post,post接口的实现,它将处理从post.xml数据文件中获取数据,创建__construct构造函数,设置路径到posts.json.

PostJsonRepository.php

让我们回到index.php输出postRepository:

输出结果如下:

非常接近了,这是数组中包含数组,我们想要有一个对象的数组,让我们来修改,最简单的创建数组方法,遍历这个multi-dimensional数组,让我们在PostJsonRepository.php做代码修改:

像上述修改应该给我们一个对象的数组,回到index.php让我们看看我们所要求:

正是我们想要的输出结果,让我们继续整理代码,回到index.php把值存到$posts:

刷新index.php输出结果如下:

从上面输出结果来看我们需要单一显示2的,看起来有点问题,应该是出在PostJsonRepository.php的$this->posts[] = (object) $post上面,因为我开始一个新数组,当然我们应该传递一个键,代码做如下修改:

接下来我们要展示posts.xml的内容,创建一个PostRssRepository.php并把PostJsonRepository.php的代码复制过来做修改,首先把posts.json修改为Post.xml,把__construct的file_get_contents改为simplexml_load_file,删除第二个参数,代码如下:

回到index.php修改代码:

刷新index.php返回结果:

PostJsonRepository输出结果

PostJsonRepository输出结果

如果从数据库中读取,那么我们创建一个PostDatabaseRepository.php,代码大概如下:

让我们回顾,对象接口是一个很好的工具,可以帮助你将类与其他应用程序分开,这就是面向对象编程的真正力量所在!
下载本课完整源码

转载请注明:林雍岷 » 第十四节:PHP对象接口

HTML Snippets Powered By : XYZScripts.com