PHP与大多数面向对象编程语言一样,不支持多重继承.也就是说每个类只能继承一个父类.为了解决这个问题,PHP引入了接口,接口的思想是指定了一个实现了该接口的类必须实现的一系列方法.接口是一种特殊的抽象类,抽象类又是一种特殊的类,所以接口也是一种特殊的类,为什么说接口是一种特殊的抽象类呢?如果一个抽象类里面的所有的方法都是抽象方法,那么我们就换一种声明方法使用"接口";也就是说接口里面所有的方法必须都是声明为抽象方法,另外接口里面不能声明变量(但可声明常量constant),而且接口里面所有的成员都是public权限的.所以子类在实现的时候也一定要使用public权限实限.
声明一个类的时候我们使用的关键字是"class",而接口一种特殊的类,使用的关键字是"interface";
类的定义: class 类名{ ... } ,接口的声明:interface 接口名{ ...}
代码
php
//定义一个接口使用interface关键字,"One"为接口名称
interface One
{
//定义一个常量
const constant = 'constant value';
//定义了一个抽象方法"fun1"
public function fun1();
}
因为接口是一种特殊的抽象类,里面所有的方法都是抽象方法,所以接口也不能产生实例对象; 它也做为一种规范,所有抽象方法需要子类去实现.
我们可以使用"extends"关键字让一个接口去继承另一个接口:
//使用"extends"继承另外一个接口
interface Two extends One
而我们定义一接口的子类去实现接口中全部抽象方法使用的关键字是"implements",而不是我们前面所说的"extends";
//使用"implements"这个关键字去实现接口中的抽象方法 接口和类之间
class Three implements One
function fun1()
...
//实现了全部方法,我们去可以使用子类去实例化对象了
$three=new Three();
我们也可以使用抽象类,去实现接口中的部分抽象方法,但要想实例化对象,这个抽象类还要有子类把它所有的抽象方法都实现才行;
在前面我们说过,PHP是单继承的,一个类只能有一父类,但是一个类可以实现多个接口,就相当于一个类要遵守多个规范,就像我们不仅要遵守国家的法律,如果是在学校的话,还要遵守学校的校规一样;
//使用implements实现多个接口
class Four implemtns 接口一, 接口二, ....
//必须把所有接口中的方法都要实现才可以实例化对象.
PHP中不仅一个类可以实现多个接口,也可以在继承一个类的同时实现多个接口, 一定要先继承类再去实现接口;
//使用extends继承一个类,使用implements实现多个接口
class Four extends 类名一 implemtns 接口一, 接口二, ....
//所有接口中的方法都要实现才可以实例化对象
.........
比如一个自定义函数:function test(){echo 'hello world';}就可以叫做 api.api 既可以是单个的函数,也可以是封装在类里的方法,当然它们也是程序代码.开发一个 api 的流程可以很简单,也可以很复杂,视具体的编程任务而决定,并没有特定的规则.比如,你需要为自己建立一个常用的函数库,命名为 my.lib.php然后把你自己编写的自定义函数,全部写在这个文件里面,那么,你就拥有了自己的api.开发的时候,只需要引入 my.lib.php,你就可以调用自己的 api 了.这是一个比较简单的例子.稍微复杂一点的,你可以把函数封装在类里面,方便继承和重用,还可以根据函数名称做一些程序设计,这个一句话说不清楚,给一个简单的例子吧:class mylib{function showmy(){echo '这是我的一个类方法';}}调用的时候,先要实例化类,然后再调用方法.再复杂一点的就是使用类接口,区别就是接口里面定义的只是方法原型,而你需要通过具体的类来实现接口中的函数,具体请参考 php 手册
可以用curl获取借楼的信息.
所谓接口,就是提供一个url,只要你满足它要求的参数,就能得到你要的数据.比如你拿到一个接口,带上所需的参数,复制到地址栏同样能得到.不过最好用程序得到.file_get_contents也可以用,不过有局限性.所以我建议用curl.给你一个函数,挺好用的.
function request($url,$https=true,$method='GET',$data=null){
$ch = curl_init();//初始化,得到资源
curl_setopt($ch, CURLOPT_URL,$url); //请求数据的路径
curl_setopt($ch, CURLOPT_HEADER,false);//是否输出头
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不直接输出结果
//curl_setopt ($ch, CURLOPT_SAFE_UPLOAD, 0);//兼容php之后的版本
if($https){
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //是否验证主机
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //是否进行证书验证
if($method=='POST'){
curl_setopt($ch, CURLOPT_POST, true); //POST传输
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //传输数据
$content_json = curl_exec($ch);
if ($content_json === false) {
return "网络请求出错: " . curl_error($ch);
curl_close($ch);
return $content_json;
①.、接口的定义:
接口:一种成员属性为抽象的特殊抽象类,在程序中同为规范的作用
interface Shop
public function buy($gid);
public function sell($gid);
public function view($gid);
class BaseShop implements Shop { public function buy($gid) { echo('你购买了ID为 :'.$gid.'的商品'); } public function sell($gid) { echo('你卖了ID为 :'.$gid.'的商品'); } public function view($gid) { echo('你查看了ID为 :'.$gid.'的商品'); } }
结论 : PHP接口类interface就是一个类的领导者,指明方向,子类必须完成它指定方法.这样不同的开发者就不要去了解别人怎么命名相应的方法.
我们都知道PHP中的类(class)是单继承的,那是不是就没有办法实现多重继承了呢?答案是否定的.我们可以通过其它特殊的方式实现类的多重 继承,比如使用接口(interface)实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身份,通过这样就可以模拟多重继承了.
下面是一个用接口(interface)实现多重继承的例子,源代码如下:
interface UserInterface{ //定义User的接口
function getname();
interface TeacherInterface{ //teacher相关接口
function getLengthOfService();
class User implements UserInterface { //实现UserInterface接口
private $name = "tom";
public function getName(){
return $this-name;
class Teacher implements TeacherInterface { //实现TeacherInterface接口
public function getLengthOfService(){
return $this-lengthOfService;
// 继承自User类,同时实现了TeacherInterface接口.
class GraduateStudent extends User implements TeacherInterface {
private $teacher ;
public function __construct(){
$this-teacher = new Teacher();
return $this-teacher-getLengthOfService();
class Act{
//注意这里的类型提示改成了接口类型
public static function getUserName(UserInterface $_user){
echo "Name is " . $_user-getName() ."br";
//这里的类型提示改成了TeacherInterface类型.
public static function getLengthOfService(TeacherInterface $_teacher){
echo "Age is " .$_teacher-getLengthOfService() ."br";
$graduateStudent = new GraduateStudent();
Act::getUserName($graduateStudent);
Act::getLengthOfService($graduateStudent);
//结果正如我们所要的,实现了有多重身份的一个对象.
示例运行结果如下:
Name is tom
抽象类 :1.类中至少有一个抽象方法
接口: 1.成员属性为常量const
①本身不能被实例化,必须继承或者引用
关键字 interface.引用关键字 implements
以上就是土嘎嘎小编为大家整理的php如何实现接口相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!