php 预定义接口 斜杠,PHP预定义接口介绍

  • Post author:
  • Post category:php


PHP预定义了6个接口介绍如下:

1.Traversable遍历接口

呵呵!其实它不是一个在PHP中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。

if($class instanceof Traversable) {

//foreach

}

2.Iterator迭代器接口

接口摘要:

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)

}

以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:class  myIterator  implements  Iterator  {

private  $position  =  0 ;

private  $array  = array(

“firstelement” ,

“secondelement” ,

“lastelement” ,

);

public function  __construct () {

$this -> position  =  0 ;

}

function  rewind () {

var_dump ( ql_METHOD );

$this -> position  =  0 ;

}

function  current () {

var_dump ( ql_METHOD );

return  $this -> array [ $this -> position ];

}

function  key () {

var_dump ( ql_METHOD );

return  $this -> position ;

}

function  next () {

var_dump ( ql_METHOD );

++ $this -> position ;

}

function  valid () {

var_dump ( ql_METHOD );

return isset( $this -> array [ $this -> position ]);

}

}

$it  = new  myIterator ;

foreach( $it  as  $key  =>  $value ) {

var_dump ( $key ,  $value );

echo  “\n” ;

}

3.IteratorAggregate聚合式迭代器接口

接口摘要:

IteratorAggregate  extends Traversable  {

//获取外部迭代器

abstract public Traversable getIterator  ( void )

}

getIterator是一个Iterator或Traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。

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数组式访问接口

接口摘要:

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  ) //复位一个偏移位置的值

}

如下可像访问数组一样访问对象:

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序列化接口

接口摘要:

Serializable  {

/* 方法 */

abstract public string serialize  ( void ) //对象的字符串表示

abstract public mixed unserialize  ( string $serialized  ) // 构造对象

}

实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。

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

接口摘要:

Closure  {

/* 方法 */

__construct  ( void ) //用于禁止实例化的构造函数

public static Closure bind  ( Closure  $closure  , object $newthis  [, mixed  $newscope  = ‘static’  ] ) //复制一个闭包,绑定指定的$this对象和类作用域。

public Closure bindTo  ( object $newthis  [, mixed  $newscope  = ‘static’  ] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。

}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” ;

如果本文对您有所帮助,请支持下本站哦!!!^_^