1.Traversable

创新互联是一家专业提供黄石港企业网站建设,专注与网站设计制作、网站制作、H5高端网站建设、小程序制作等业务。10年已为黄石港众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
他是一个遍历接口规范
注意:发现一个有用的函数get_declared_classes,可以以数组形式显示当前脚本下所有已经定义的类名
2.Iterator
Iterator迭代器继承自Traversable,是一种遍历对象内容的对象。
你可以自己写一个子类继承自它,并写上具体遍历的方法。
Iterator包含:current(返回当前元素),key(当前键),next(下一个元素),rewind(返回至初始元素),valid(检测当前元素是否存在)五种方法。
3.IteratorAggregate
与Iterator不同的是 通过这个接口可以用此基类的getIterator方法返回一个外部迭代器对象用于遍历子类对象内容。
4.arrayaccess
可以通过这个数组式访问接口动态添加修改和访问数组的属性
- ArrayAccess::offsetExists — 检查一个偏移位置是否存在
- ArrayAccess::offsetGet — 获取一个偏移位置的值
- ArrayAccess::offsetSet — 设置一个偏移位置的值
- ArrayAccess::offsetUnset — 复位一个偏移位置的值
挺好的一个东西,和__get __set 类似。
例:
class obj implements ArrayAccess    
{    
    private $array = [];    
    /**    
     * @param offset    
     */    
    public function offsetExists ($offset) {    
        return isset($array[$offset]);    
    }    
    /**    
     * @param offset    
     */    
    public function offsetGet ($offset) {    
        return $this->offsetExists($offset)?$this->array[$offset]:NULL;    
    }    
    /**    
     * @param offset    
     * @param value    
     */    
    public function offsetSet ($offset, $value) {    
        if(!is_null($offset))    
        {    
            $this->array[$offset] = $value;    
        }    
        else{    
            $this->array[] = $value;    
        }    
    }    
    /**    
     * @param offset    
     */    
    public function offsetUnset ($offset) {    
        unset($this->array[$offset]);    
    }    
}    
$obj = new obj;    
$obj['a'] = 5;    
$obj['b'] = "string";    
$obj['c'] = 6.7;    
$obj['d'] = [2,3,4];    
$obj[] = "haha";    
unset($obj['a']);    
print_r($obj);    
?>
5.序列化接口
自定义序列化和反序列化规则。
见下列,序列化的接口可以重载系统内置函数serialize和unserialize。是否可以用此来加密对象?
class a implements Serializable    
{    
    private $data = "abcde";    
    public function serialize () {    
        echo __METHOD__;    
        return serialize($this->data);    
    }    
    public function unserialize ($serialized) {    
        echo __METHOD__;    
        return unserialize($this->data);    
    }    
    public function getData()    
    {    
        return $this->data;    
    }    
}    
$obj = new a;    
$nobj = serialize($obj);    
echo $nobj;    
?>
6.Closure类
它和闭包函数非常相似
例:
//1.匿名函数    
$a = function ($param){echo $param;};    
//2.简单的闭包    
//2.1    
function p()    
{    
    $f = function($str)    
    {    
        echo $str;    
    };    
    $f("something");    
}    
//2.2    
function d()    
{    
    return function ($str){echo $str;};    
}    
//2.3 注意这里的$f是一个函数    
function e($f)    
{    
    $f("something");    
}    
//2.4    
e(function($str){echo $str;});    
//3.连接闭包和外部变量的关键词 use 这在之前写购物车类时已经用过了    
function get()    
{    
    $rmb = 1;    
    $func = function() use (&$rmb)    
    {    
        ++$rmb;    
        echo $rmb;    
    };    
    $func(); // print 2;    
    //或者return $func;    
    return $func;    
}    
?>
发现一种新的写法:静态函数
$a = static function()    
{    
    echo "good";    
};    
$a();    
?>
注意:closure的bind和bindTo跳过了 因为只支持5.4 所以实际运用中不多见,暂时不看了。
本章主要是迭代器的理解。
分享标题:复习PHP-语言参考-预定义接口
地址分享:http://www.jxjierui.cn/article/gejeod.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 