成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ArrayAccess使用詳解和實(shí)現(xiàn)配置化程序

李濤 / 562人閱讀

摘要:簡介數(shù)組式訪問接口提供像訪問數(shù)組一樣訪問對象的能力的接口。下面我?guī)銈円黄鹂纯次沂沁@么實(shí)現(xiàn)的在項(xiàng)目更目錄下創(chuàng)建一個(gè)目錄在目錄下創(chuàng)建相應(yīng)的配置文件,比如和。

簡介

ArrayAccess(數(shù)組式訪問)接口:提供像訪問數(shù)組一樣訪問對象的能力的接口。

提供接口
ArrayAccess {
    //檢查一個(gè)偏移位置是否存在
    abstract public boolean offsetExists ( mixed $offset );

    //獲取一個(gè)偏移位置的值
    abstract public mixed offsetGet ( mixed $offset );

    //設(shè)置一個(gè)偏移位置的值
    abstract public void offsetSet ( mixed $offset , mixed $value );

    //復(fù)位一個(gè)偏移位置的值
    abstract public void offsetUnset ( mixed $offset );
}

如果我們想像數(shù)組一樣來訪問你的PHP對象只需要實(shí)現(xiàn)ArrayAccess接口即可

實(shí)例運(yùn)用

場景:假如我有一個(gè)User類,映射的是用戶的信息,想通過數(shù)組的方式來訪問和設(shè)置用戶信息

data =  [
            "name" => "moell",
            "sex" => "男",
            "email" => "[email protected]"
        ];
    }

    /**
     * 檢查指定字段數(shù)據(jù)是否存在
     *
     * @param $offset
     * @return bool
     */
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    /**
     * 獲取指定字段數(shù)據(jù)
     *
     * @param $offset
     * @return mixed
     */
    public function offsetGet($offset)
    {
        return $this->data[$offset];
    }

    /**
     * 設(shè)置指定字段數(shù)據(jù)
     *
     * @param $offset
     * @param $value
     * @return mixed
     */
    public function offsetSet($offset, $value)
    {
        return $this->data[$offset] = $value;
    }

    /**
     * 刪除指定字段數(shù)據(jù)
     *
     * @param $offset
     */
    public function offsetUnset($offset)
    {
        unset($this->data[$offset]);
    }
}

$user = new User();

//獲取用戶的email
echo $user["email"].PHP_EOL;  // [email protected]

//檢查age是否存在
var_dump(isset($user["age"])); // bool(false)

//設(shè)置age
$user["age"] = 18;
echo $user["age"].PHP_EOL; //18

//刪除age
unset($user["age"]);
var_dump(isset($user["age"])); // bool(false)

我們的對象可以像數(shù)組一樣操作了,是不是很神奇呢?


實(shí)現(xiàn)程序配置化

在我們構(gòu)建應(yīng)用中,經(jīng)常會(huì)通過一個(gè)配置文件變更程序的一個(gè)行為,通過ArrayAccess我們會(huì)更輕松的實(shí)現(xiàn)。

下面我?guī)銈円黄鹂纯次沂沁@么實(shí)現(xiàn)的

1. 在項(xiàng)目更目錄下創(chuàng)建一個(gè)config目錄
2. 在config目錄下創(chuàng)建相應(yīng)的配置文件,比如app.php 和 database.php。文件程序如下

app.php

 "app name",
    "version" => "v1.0.0"
];

database.php

 [
        "host" => "localhost",
        "user" => "root",
        "password" => "12345678"
    ]
];

3. Config.php實(shí)現(xiàn)ArrayAccess

path = __DIR__."/config/";
    }

    public static function instance()
    {
        if (!(self::$instance instanceof Config)) {
            self::$instance = new Config();
        }
        return self::$instance;
    }
    
    public function offsetExists($offset)
    {
        return isset($this->config[$offset]);
    }
    
    public function offsetGet($offset)
    {
        if (empty($this->config[$offset])) {
            $this->config[$offset] = require $this->path.$offset.".php";
        }
        return $this->config[$offset];
    }

    public function offsetSet($offset, $value)
    {
        throw new Exception("不提供設(shè)置配置");
    }

    public function offsetUnset($offset)
    {
        throw new Exception("不提供刪除配置");
    }
}

$config = Config::instance();

//獲取app.php 文件的 name
echo $config["app"]["name"].PHP_EOL; //app name

//獲取database.php文件mysql的user配置
echo $config["database"]["mysql"]["user"].PHP_EOL; // root

如果你給我一樣熱愛PHP,歡迎加入QQ群:339803849一起討論

聲明

文章轉(zhuǎn)載說明出處,本文地址:http://moell.cn/article/29

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21993.html

相關(guān)文章

  • 【PHP高級(jí)特性】ArrayAccess 接口

    摘要:提供了個(gè)常用的預(yù)定義接口,實(shí)現(xiàn)某些特定的能力。是啥如官方文檔所述,它提供像訪問數(shù)組一樣訪問對象的能力的接口。它提供了個(gè)接口我們實(shí)現(xiàn)這個(gè)接口,依次對應(yīng)數(shù)組的讀取,設(shè)置,操作。用上了它,可以讓一個(gè)類即可以支持對象引用,也支持?jǐn)?shù)組引用。 php提供了6個(gè)常用的預(yù)定義接口,實(shí)現(xiàn)某些特定的能力。其中最最常用的就是 ArrayAccess 了,像 Laravel 這種流行的框架都用到了它。 Arr...

    mrli2016 評論0 收藏0
  • 【SPL標(biāo)準(zhǔn)庫專題(3)】Classes

    摘要:我把分為五個(gè)部分,,,,而其中是就是做一些類的介紹與相關(guān)的類在各自文章內(nèi),在介紹這些類之前,先介紹幾個(gè)接口數(shù)組式訪問接口只要實(shí)現(xiàn)了這個(gè)接口,就可以使得像那樣操作。只有內(nèi)部的類用寫的類才可以直接實(shí)現(xiàn)接口代碼中使用或接口來實(shí)現(xiàn)遍歷。 我把SPL分為五個(gè)部分:Iterator,Classes,Exceptions,Datastructures,F(xiàn)unction;而其中classes是就是做一...

    binaryTree 評論0 收藏0
  • Lumen框架“服務(wù)容器”源碼解析

    摘要:下邊是服務(wù)容器工作示意圖服務(wù)容器的產(chǎn)生框架中,服務(wù)容器是由中類完成的,該類實(shí)現(xiàn)了服務(wù)容器的核心功能。并不是框架中所有的類都能實(shí)現(xiàn)自動(dòng)依賴注入的功能只有服務(wù)容器創(chuàng)建的類實(shí)例才能實(shí)現(xiàn)依賴自動(dòng)注入??蚣苤械姆?wù)容器是全局的,不需要 1.服務(wù)容器 服務(wù)容器是Lumen框架整個(gè)系統(tǒng)功能調(diào)度配置的核心,它提供了整個(gè)框架運(yùn)行過程中的一系列服務(wù)。服務(wù)容器就是提供服務(wù)(服務(wù)可以理解為系統(tǒng)運(yùn)行中需要的東西...

    ytwman 評論0 收藏0
  • 讀 PHP - Pimple 源碼筆記(上)

    摘要:也就是閑時(shí)為了寫文章而寫的一篇關(guān)于源碼的閱讀筆記。是標(biāo)準(zhǔn)庫的縮寫,一組旨在解決標(biāo)準(zhǔn)問題的接口和類的集合。提供了一套標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu),一組遍歷對象的迭代器,一組接口,一組標(biāo)準(zhǔn)的異常,一系列用于處理文件的類,提供了一組函數(shù),具體可以查看文檔。 也就是閑時(shí)為了寫文章而寫的一篇關(guān)于 Pimple 源碼的閱讀筆記。Pimple 代碼有兩種編碼方式,一種是以 PHP 編寫的,另一種是以 C 擴(kuò)展編寫...

    cfanr 評論0 收藏0
  • PHP 依賴注入

    摘要:通常調(diào)用一個(gè)類里面的方法需要如何操作依賴注入模式用來減少程序間的耦合依賴注入共有三種模式方法注入著重說下方法注入并結(jié)合單例注冊的服務(wù)數(shù)組訪問接口測試郵件發(fā)送成功方式訪問通過數(shù)組的方式訪問也是通過該方式實(shí)現(xiàn)依賴 通常調(diào)用一個(gè)類里面的方法需要如何操作: $class = new class();$class->fun() 依賴注入模式用來減少程序間的耦合 依賴注入共有三種模式: sette...

    zengdongbao 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<