您好,登錄后才能下訂單哦!
1.Traversable
他是一個遍歷接口規范
注意:發現一個有用的函數get_declared_classes,可以以數組形式顯示當前腳本下所有已經定義的類名
2.Iterator
Iterator迭代器繼承自Traversable,是一種遍歷對象內容的對象。
你可以自己寫一個子類繼承自它,并寫上具體遍歷的方法。
Iterator包含:current(返回當前元素),key(當前鍵),next(下一個元素),rewind(返回至初始元素),valid(檢測當前元素是否存在)五種方法。
3.IteratorAggregate
與Iterator不同的是 通過這個接口可以用此基類的getIterator方法返回一個外部迭代器對象用于遍歷子類對象內容。
4.arrayaccess
可以通過這個數組式訪問接口動態添加修改和訪問數組的屬性
挺好的一個東西,和__get __set 類似。
例:
<?php
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。是否可以用此來加密對象?
<?php
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類
它和閉包函數非常相似
例:
<?php
//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;
}
?>
發現一種新的寫法:靜態函數
<?php
$a = static function()
{
echo "good";
};
$a();
?>
注意:closure的bind和bindTo跳過了 因為只支持5.4 所以實際運用中不多見,暫時不看了。
本章主要是迭代器的理解。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。