中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

復習PHP-語言參考-預定義接口

發布時間:2020-05-26 22:51:50 來源:網絡 閱讀:242 作者:qzd1989 欄目:web開發

1.Traversable

他是一個遍歷接口規范

注意:發現一個有用的函數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 類似。

例:

<?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 所以實際運用中不多見,暫時不看了。

本章主要是迭代器的理解。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英山县| 盐亭县| 醴陵市| 历史| 肃宁县| 深泽县| 牟定县| 上林县| 怀化市| 密云县| 芦山县| 东阳市| 会宁县| 荣昌县| 外汇| 邳州市| 泸西县| 和龙市| 夏邑县| 宝鸡市| 久治县| 凌源市| 合肥市| 开平市| 黔东| 石河子市| 鸡东县| 德州市| 米脂县| 抚顺县| 高碑店市| 普定县| 南郑县| 长岛县| 友谊县| 古交市| 开阳县| 桃源县| 盐山县| 浦北县| 新营市|