接口是什么?
使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。
接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。
什么时候用接口?
1、定规范,保持统一性;
2、多个平级的类需要去实现同样的方法,只是实现方式不一样
接口的特性:
1. 接口中定义的所有方法都必须是公有
2. 接口的方法默认是抽象的,所以不在方法名前面加abstract
3. 类中必须实现接口中定义的所有方法,否则会报一个致命错误
4. 接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样,常量不能被子类或子接口所覆盖
5. 类可以实现多个接口(相当于把多个功能集于一身,如手机实现了小灵通、MP3、MP4的功能)
6. 接口也可以继承接口
7. 类要实现接口,必须使用和接口中所定义的方法完全一致的方式。否则会导致致命错误。
实例一:
~~~
// 声明一个接口
interface test
{
public function setVariable($name, $var);
private function getHtml($template);// 提示错误,接口中定义的所有方法都必须是公有
}
~~~
实例二:
~~~
// 声明一个接口
interface test
{
public function setVariable($name, $var);
public function getHtml($template);
}
class a implements test{
public function setVariable($name, $var)
{
// TODO: Implement setVariable() method.
}
// 屏蔽该方法会提示错误 ,类中必须实现接口中定义的所有方法
/*public function getHtml($template)
{
// TODO: Implement getHtml() method.
}*/
}
~~~
实例三:
~~~
interface a
{
const b = 'Interface constant';
//public $b = ''; // 错误写法 接口不能定义成员属性
}
// 输出接口常量
echo a::b;
// 错误写法,因为常量不能被覆盖。接口常量的概念和类常量是一样的。
/*class b implements a
{
const b = 'Class constant';
}*/
~~~
实例四:
~~~
interface a
{
public function foo();
}
interface b
{
public function bar();
}
// 类可以实现多个接口
class d implements a, b
{
public function foo()
{
}
public function bar()
{
}
}
~~~
文章来源:
https://www.cnblogs.com/minigrasshopper/p/7754512.html
http://blog.csdn.net/u014222774/article/details/54880006
http://www.php.net/manual/zh/language.oop5.interfaces.php
- 前言
- 函数参考
- Socket 函数
- socket_accept
- socket_bind
- socket_clear_error
- socket_close
- socket_connect
- socket_create_listen
- socket_create_pair
- socket_create
- socket_getpeername
- socket_getsockname
- socket_last_error
- socket_listen
- socket_read
- socket_recv
- socket_select
- socket_send
- socket_set_block
- socket_set_nonblock
- SplQueue
- 魔术方法
- 魔术常量
- 杂项
- backlog的用处
- new self()和new static()的区别
- PHP变量的生命周期
- PHP抽象类
- 对象接口
- PHP中的常用关键字
- 常量
- 内存泄露
- global 与 $GLOBAL
- 简单说明CGI和动态请求是什么
- 设计模式
- 单例模式
- 工厂模式
- 适配器模式
- 策略模式
- 观察者模式
- 控制反转IoC简介
- session
- use_trans_sid
- auto_start
- session_id
- cookie_secure
- 面试
- 数据库相关
- 语句相关
- 索引相关
- 字段相关
- PHP相关
- 字符串相关
- 函数相关
- 运算符优先级相关
- 错误相关
- redis相关
- 10个常见的Redis面试"刁难"问题
- mysql
- MySQL中的锁
- MySQL存储引擎MyISAM 和 InnoDB的区别
- MySQL半同步复制
- explain 命令详解
- 索引
- 数据库事务
- MySQL和B树的那些事
- git
- github----向开源框架提交pr的过程
- 推荐博客
- linux
- 命令
- free
- 高并发
- 抢购/秒杀功能
- 算法
- 一致性Hash算法