[TOC]
* * * * *
##1 接口意义
1 接口用来**约定类的功能**。指定类必须实现的功能方法。
2 接口文件中使用**interface**关键字声明接口,在其中**列出需要实现的功能方法名称**。
3 接口中的方法的**修饰符必须是public**,并且**方法体为空**。
4 接口也可以使用**extends扩展接口**,也可**定义常量**。
##2 接口使用
### 2-1 接口简单使用示例
~~~
<?php
// 声明'iTemplate'接口,列出需要实现的功能方法名称
interface iTemplate
{
public function setVariable ( $name , $var );
public function getHtml ( $template );
}
// 创建类实现接口中的方法。
class Template implements iTemplate
{
private $vars = array();
public function setVariable ( $name , $var )
{
$this -> vars [ $name ] = $var ;
}
public function getHtml ( $template )
{
foreach( $this -> vars as $name => $value ) {
$template = str_replace ( '{' . $name . '}' , $value , $template );
}
return $template ;
}
}
~~~
### 2-2 使用extends扩展接口
~~~
// 使用接口b扩展接口a
interface a
{
public function foo ();
}
interface b extends a
{
public function baz ( Baz $baz );
}
//创建类实现扩展后的接口b
class c implements b
{
public function foo ()
{
}
public function baz ( Baz $baz )
{
}
}
~~~
~~~
//创建两个并列接口
interface a
{
public function foo ();
}
interface b
{
public function bar ();
}
//接口c同时继承a与b接口
interface c extends a , b
{
public function baz ();
}
//创建类d实现接口c
class d implements c
{
public function foo ()
{
}
public function bar ()
{
}
public function baz ()
{
}
}
~~~
###2-3 在接口中使用常量
~~~
<?php
//接口a中包含常量b
interface a
{
const b = 'Interface constant' ;
}
//输出接口常量
echo a :: b ;
~~~
## 3 常用接口
>[info] php中预定义了特定功能接口。
### 3-1 迭代器接口Iterator
> 1 接口功能方法
~~~
Iterator extends Traversable {
//返回当前键的值
abstract public mixed current ( void )
//返回当前键名
abstract public scalar key ( void )
//移动到下一个
abstract public void next ( void )
//返回开头
abstract public void rewind ( void )
//检查当前键名是否有效
abstract public boolean valid ( void )
}
~~~
> 2 接口实例
~~~
<?php
;自定义类实现迭代器接口功能方法
class myIterator implements Iterator {
private $position = 0 ;
private $array = array(
"firstelement" ,
"secondelement" ,
"lastelement" ,
);
public function __construct () {
$this -> position = 0 ;
}
function rewind () {
var_dump ( __METHOD__ );
$this -> position = 0 ;
}
function current () {
var_dump ( __METHOD__ );
return $this -> array [ $this -> position ];
}
function key () {
var_dump ( __METHOD__ );
return $this -> position ;
}
function next () {
var_dump ( __METHOD__ );
++ $this -> position ;
}
function valid () {
var_dump ( __METHOD__ );
return isset( $this -> array [ $this -> position ]);
}
}
;创建迭代器对象
$it = new myIterator ;
;使用foreach遍历迭代器对象
foreach( $it as $key => $value ) {
var_dump ( $key , $value );
echo "\n" ;
}
?>
~~~
输出
~~~
string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "firstelement"string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "lastelement"string(16) "myIterator::next"
string(17) "myIterator::valid"
~~~
**PHP内置了SPL迭代器**
### 3-2 数组访问接口ArrayAccess
> 1 接口功能方法
~~~
ArrayAccess {
;检查数组下标是否有效
abstract public boolean offsetExists ( mixed $offset )
;获取数组下标的对应值
abstract public mixed offsetGet ( mixed $offset )
;修改数组下标的对应值
abstract public void offsetSet ( mixed $offset , mixed $value )
;删除数组下标的值
abstract public void offsetUnset ( mixed $offset )
}
~~~
> 2 接口使用
~~~
;创建类实现数组访问接口
class obj implements Arrayaccess {
private $container = array();
public function __construct () {
$this -> container = array(
"one" => 1 ,
"two" => 2 ,
"three" => 3 ,
);
}
public function offsetSet ( $offset , $value ) {
if ( is_null ( $offset )) {
$this -> container [] = $value ;
} else {
$this -> container [ $offset ] = $value ;
}
}
public function offsetExists ( $offset ) {
return isset( $this -> container [ $offset ]);
}
public function offsetUnset ( $offset ) {
unset( $this -> container [ $offset ]);
}
public function offsetGet ( $offset ) {
return isset( $this -> container [ $offset ]) ? $this -> container [ $offset ] : null ;
}
}
;创建数组访问对象
$obj = new obj ;
;数组访问操作
var_dump (isset( $obj [ "two" ]));
var_dump ( $obj [ "two" ]);
unset( $obj [ "two" ]);
var_dump (isset( $obj [ "two" ]));
$obj [ "two" ] = "A value" ;
var_dump ( $obj [ "two" ]);
$obj [] = 'Append 1' ;
$obj [] = 'Append 2' ;
$obj [] = 'Append 3' ;
print_r ( $obj );
~~~
输出
~~~
bool(true)
int(2)
bool(false)
string(7) "A value"
obj Object
(
[container:obj:private] => Array
(
[one] => 1
[three] => 3
[two] => A value
[0] => Append 1
[1] => Append 2
[2] => Append 3
))
~~~
### 3-3 Json序列化接口JsonSerializable
> 1 接口功能方法
~~~
JsonSerializable {
;指定要被序列化的数据
abstract public mixed jsonSerialize ( void )
}
~~~
> 2 接口使用实例
实例1
~~~
<?php
;创建类实现序列化接口
class ArrayValue implements JsonSerializable {
public function __construct (array $array ) {
$this -> array = $array ;
}
public function jsonSerialize () {
return $this -> array ;
}
}
;构造参数
$array = [ 1 , 2 , 3 ];
;序列化输出json结构数据
echo json_encode (new ArrayValue ( $array ), JSON_PRETTY_PRINT );
?>
~~~
输出
~~~
[
1,
2,
3
]
~~~
实例2
~~~
<?php
;创建类实现序列化接口功能
class ArrayValue implements JsonSerializable {
public function __construct (array $array ) {
$this -> array = $array ;
}
public function jsonSerialize () {
return $this -> array ;
}
}
;构造参数
$array = [ 'foo' => 'bar' , 'quux' => 'baz' ];
;序列化输出json结构数据
echo json_encode (new ArrayValue ( $array ), JSON_PRETTY_PRINT );
?>
~~~
输出
~~~
{
"foo": "bar",
"quux": "baz"
}
~~~
- 更新记录
- 概述
- 文件索引
- 函数索引
- 章节格式
- 框架流程
- 前:章节说明
- 主:(index.php)入口
- 主:(start.php)框架引导
- 主:(App.php)应用启动
- 主:(App.php)应用调度
- C:(Controller.php)应用控制器
- M:(Model.php)数据模型
- V:(View.php)视图对象
- 附:(App.php)应用启动
- 附:(base.php)全局变量
- 附:(common.php)模式配置
- 附:(convention.php)全局配置
- 附:(Loader.php)自动加载器
- 附:(Build.php)自动生成
- 附:(Hook.php)监听回调
- 附:(Route.php)全局路由
- 附:(Response.php)数据输出
- 附:(Log.php)日志记录
- 附:(Exception.php)异常处理
- 框架工具
- 另:(helper.php)辅助函数
- 另:(Cache.php)数据缓存
- 另:(Cookie.php)cookie操作
- 另:(Console.php)控制台
- 另:(Debug.php)开发调试
- 另:(Error.php)错误处理
- 另:(Url.php)Url操作文件
- 另:(Loader.php)加载器实例化
- 另:(Input.php)数据输入
- 另:(Lang.php)语言包管理
- 另:(ORM.php)ORM基类
- 另:(Process.php)进程管理
- 另:(Session.php)session操作
- 另:(Template.php)模板解析
- 框架驱动
- D:(\config)配置解析
- D:(\controller)控制器扩展
- D:(\model)模型扩展
- D:(\db)数据库驱动
- D:(\view)模板解析
- D:(\template)模板标签库
- D:(\session)session驱动
- D:(\cache)缓存驱动
- D:(\console)控制台
- D:(\process)进程扩展
- T:(\traits)Trait目录
- D:(\exception)异常实现
- D:(\log)日志驱动
- 使用范例
- 服务器与框架的安装
- 控制器操作
- 数据模型操作
- 视图渲染控制
- MVC开发初探
- 模块开发
- 入口文件定义全局变量
- 运行模式开发
- 框架配置
- 自动生成应用
- 事件与插件注册
- 路由规则注册
- 输出控制
- 多种应用组织
- 综合应用
- tp框架整合后台auto架构快速开发
- 基础原理
- php默认全局变量
- php的魔术方法
- php命名空间
- php的自动加载
- php的composer
- php的反射
- php的trait机制
- php设计模式
- php的系统时区
- php的异常错误
- php的输出控制
- php的正则表达式
- php的闭包函数
- php的会话控制
- php的接口
- php的PDO
- php的字符串操作
- php的curl
- 框架心得
- 心:整体结构
- 心:配置详解
- 心:加载器详解
- 心:输入输出详解
- 心:url路由详解
- 心:模板详解
- 心:模型详解
- 心:日志详解
- 心:缓存详解
- 心:控制台详解
- 框架更新
- 4.20(验证类,助手函数)
- 4.27(新模型Model功能)
- 5.4(新数据库驱动)
- 7.28(自动加载)