作者热门文章
- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP中预定义的6种接口介绍由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
PHP预定义了6个接口介绍如下:
1.Traversable遍历接口 。
呵呵!其实它不是一个在PHP中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历.
1
2
3
|
if
(
$class
instanceof
Traversable) {
//foreach
}
|
2.Iterator迭代器接口 。
接口摘要:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Iterator
extends
Traversable
{
//返回当前索引游标指向的元素
abstract
public
mixed current(void)
//返回当前索引游标指向的元素的键名
abstract
public
scalar key(void)
//移动当前索引游标指向下一元素
abstract
public
void next(void)
//重置索引游标的指向第一个元素
abstract
public
void
rewind
(void)
//判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或 next()使用
abstract
public
boolean valid(void)
}
|
以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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
(
$it
as
$key
=>
$value
) {
var_dump (
$key
,
$value
);
echo
"\n"
;
}
|
3.IteratorAggregate聚合式迭代器接口 。
接口摘要:
1
2
3
4
5
|
IteratorAggregate
extends
Traversable {
//获取外部迭代器
abstract
public
Traversable getIterator ( void )
}
|
getIterator是一个Iterator或Traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class
myData
implements
IteratorAggregate {
public
$property1
=
"Public property one"
;
public
$property2
=
"Public property two"
;
public
$property3
=
"Public property three"
;
public
function
__construct () {
$this
-> property4 =
"last property"
;
}
public
function
getIterator () {
return
new
ArrayIterator (
$this
);
}
}
$obj
=
new
myData ;
foreach
(
$obj
as
$key
=>
$value
) {
var_dump (
$key
,
$value
);
echo
"\n"
;
}
|
4.ArrayAccess数组式访问接口 。
接口摘要:
1
2
3
4
5
6
7
|
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
)
//复位一个偏移位置的值
}
|
如下可像访问数组一样访问对象:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
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
);
|
5.Serializable序列化接口 。
接口摘要:
1
2
3
4
5
6
|
Serializable {
/* 方法 */
abstract
public
string serialize ( void )
//对象的字符串表示
abstract
public
mixed unserialize ( string
$serialized
)
// 构造对象
}
|
实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class
obj
implements
Serializable {
private
$data
;
public
function
__construct () {
$this
-> data =
"My private data"
;
}
public
function
serialize () {
return
serialize (
$this
-> data );
}
public
function
unserialize (
$data
) {
$this
-> data = unserialize (
$data
);
}
public
function
getData () {
return
$this
-> data ;
}
}
$obj
=
new
obj ;
$ser
= serialize (
$obj
);
print_r(
$ser
);
$newobj
= unserialize (
$ser
);
print_r(
$newobj
);
|
。
6.Closure 接口摘要:
1
2
3
4
5
6
|
Closure {
/* 方法 */
__construct ( void )
//用于禁止实例化的构造函数
public
static
Closure bind ( Closure
$closure
, object
$newthis
[, mixed
$newscope
=
'static'
] )
//复制一个闭包,绑定指定的$this对象和类作用域。
public
Closure bindTo ( object
$newthis
[, mixed
$newscope
=
'static'
] )
//复制当前闭包对象,绑定指定的$this对象和类作用域。
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class
A {
private
static
$sfoo
= 1 ;
private
$ifoo
= 2 ;
}
$cl1
=
static
function
() {
return
A ::
$sfoo
;
};
$cl2
=
function
() {
return
$this
-> ifoo ;
};
$bcl1
= Closure :: bind (
$cl1
, null ,
'A'
);
$bcl2
= Closure :: bind (
$cl2
,
new
A (),
'A'
);
echo
$bcl1
(),
"\n"
;
echo
$bcl2
(),
"\n"
;
|
最后此篇关于PHP中预定义的6种接口介绍的文章就讲到这里了,如果你想了解更多关于PHP中预定义的6种接口介绍的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是一名优秀的程序员,十分优秀!