无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

函數(shù)式、oop 和命名空間--對于 destoon 代碼優(yōu)秀設(shè)計的思考 一

2018-12-10 14:53 作者:海諾者  | 我要投稿

在這篇文章名字中使用優(yōu)秀是經(jīng)過我這兩天研究后決定的。

原因是我在使用了這么多年的`oop`后再見到`function`的驚訝。


正如我在一開始入門編程時,僅會用 `html` 后來半推半就的了解了點 `asp`,第一次看到別人的 `asp` 代碼用了函數(shù)定義一樣。

我也不知道文章會如何分,在未完成之前就隨手記吧。

# 通過對入口文件分析來說說 `oop` 和 `函數(shù)式` 的不同

1. 大部分的 `oop` 習(xí)慣于使用單入口,因為單入口更加方便處理,使用基類進(jìn)行處理讓系統(tǒng)更加完整,可以通過基類進(jìn)行解耦,不用過多關(guān)注業(yè)務(wù)邏輯之外的架構(gòu)。

2. 在看到 `destoon` 后讓我想到了 `discuz!`,當(dāng)年在使用論壇程序的時候我們就在用了這樣的方式。 總結(jié)特點如下:

? ? 1. 很少使用類,后者僅有部分內(nèi)容使用類(一般用類的也就是數(shù)據(jù)庫,這也是比較先進(jìn)的了,大部分仍然還是用函數(shù) 定一個全局變量)

? ? 2. 函數(shù)思想,所有的方法封裝成函數(shù)

? ? 3. 變量,通用全局變量。通過將大部分的變量定義成全局變量來進(jìn)行處理變量的變化。

? ? 4. 目錄結(jié)構(gòu),由于函數(shù)式維護(hù)的復(fù)雜性,更多的人在寫此類框架的將結(jié)構(gòu)定義的非常明確。這種方式其實與`命名空間`比較類似。定義公共的模塊路徑,入口文件通過條件判斷來引入不同的模塊下的相同定義名的文件。

3. 暫且不說 `discuz!` 單入口解決方案。我這里研究了下 `destoon` 的分站解決方案。`destoon`的分站首頁和主站首頁用了相同的入口文件?

? ? 1. 入口文件引入的公共文件 `common.inc.php` 定義幾個變量 `$city_domain = $city_template = $city_sitename = '';`

? ? 2. 如果開啟了分站 `$DT['city'] ` 為0 未開啟 為1 開啟? 這里使用了緩存 導(dǎo)致比較難以明確 `$DT['city']`的來源? 具體可以通過查看 `cache_module()` 方法來確認(rèn)。

? ? 3. 如果開啟分站則加載分站處理公共腳本`city.inc.php`;

? ? 4. 通過匹配域名 `getenv('http_host')`來獲取到網(wǎng)站訪問域名,然后去 `city`表中查詢域名對應(yīng)的分站,如果存在則,將表查詢的 `id` 賦給 `cityid`,來確定有分站。

? ? 5. 通過 `cityid` 再次得到分站信息然后賦值? ? ??

? ? ```php

? ? $c = $db->get_one("SELECT * FROM {$DT_PRE}city WHERE areaid=$cityid");

? ? $city_name = $c['name'];

? ? $city_domain = $c['domain'];

? ? $city_template = $c['template'];

? ? ```

? ? 6. 得到了城市分站相關(guān)信息模板設(shè)置,然后就是堵數(shù)據(jù)處理模板了。

4. 通過3的分析,再次讓我感受到了`destoon`作者設(shè)計的苦心。我們在用`oop`在基類中的構(gòu)造方法中也是完成這一套邏輯。同樣跟`oop`對比后,我們發(fā)現(xiàn)我們對于`oop`的認(rèn)同感增強(qiáng)了,而對于函數(shù)式這種寫法也更加排斥。 因為你不知道某個變量來自于哪里,尤其是我們用`extract($array)`后的崩潰感。


#命名空間與函數(shù)和變量隔離

1. 在函數(shù)式中我們沒法定義兩個相同名稱的`funciton`;

2. 在`oop`中我們可以在不同的類中定義相同名稱的 `function`,但是在公共函數(shù)文件中仍然跟函數(shù)式一樣無法定義相同名稱的`function`;

3. 命名空間的出現(xiàn)讓我們避免了這個問題。當(dāng)我們對一個 `php` 語言文件頂部增加`namespace Foo;`的時候,我們就將這個文件劃分到了 `Foo` 空間下。如下面對的代碼.??

```php

namespace Foo;

function base64_urlSafeEcode($data){

? ? $find = ['+', '/'];

? ? $replace = ['-', '_'];

? ? return str_replace($find, $replace, base64_encode($data));

}

```

? 這個時候我們調(diào)用 `base64_urlSafeEcode()`的時候需要使用 `\Foo\base64_urlSafeEcode()`;當(dāng)然可以將這個方法明明為`base64_encode()`。之所以定義不同名稱是為了更好讓人理解,這個 `base64` 編碼方法是`url 安全`的。


函數(shù)式、oop 和命名空間--對于 destoon 代碼優(yōu)秀設(shè)計的思考 一的評論 (共 條)

分享到微博請遵守國家法律
漾濞| 长顺县| 东源县| 稷山县| 定西市| 龙门县| 惠东县| 都江堰市| 宜阳县| 宜川县| 东丰县| 东山县| 交口县| 松江区| 杭州市| 石阡县| 顺平县| 定南县| 锦屏县| 印江| 慈利县| 沙坪坝区| 峨眉山市| 兴化市| 泽普县| 且末县| 汝城县| 桐庐县| 合水县| 武清区| 德昌县| 达日县| 玉环县| 镇康县| 镇江市| 琼结县| 内丘县| 中牟县| 青海省| 永吉县| 定州市|