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

資訊專欄INFORMATION COLUMN

SG :一個簡單的PHP語法糖擴展

warkiz / 606人閱讀

摘要:本文介紹筆者自己寫的語法糖擴展,擴展了一種全新的超全局變量獲取方式。優(yōu)秀的語法糖,應(yīng)該是一種靈魂思想的注入,簡單寫法的應(yīng)用。非常重要的一點是它很簡單項目背景這個出發(fā)點很簡單,從擴展名稱我們應(yīng)該能猜到它是做什么的。

奇技指南
語法糖往往給程序員提供了更實用的編碼方式,可以使代碼更簡潔流暢,語義更自然。本文介紹筆者自己寫的PHP語法糖擴展,擴展了一種全新的PHP超全局變量獲取方式。
本文作者范家鵬,360技術(shù)委員會--WEB服務(wù)端分TC委員。
1、說說語法糖

首先說說“語法糖”這個詞絕非貶義詞,它可以給我們的開發(fā)工作帶來便利,是一種輕量級便捷的寫法,既不會對語言本身的使用造成不利影響,也不會在性能上帶來損失。

通常情況下,使用語法糖能夠增加程序的可讀性,減少程序復(fù)雜性,減少編碼中出錯的機會,也對開發(fā)工程師具有友好性,能夠提升我們的開發(fā)效率。?

優(yōu)秀的語法糖,應(yīng)該是一種靈魂思想的注入,簡單寫法的應(yīng)用。我這里用一幅圖來表示:

2、什么是SG?

SG?全稱 Superglobals,引用全局作用域中可用的全部變量。SG擴展了一種全新的PHP超全局變量獲取方式。?

這些超全局變量是:_SERVER,_GET,_POST,_FILES,_COOKIE,_SESSION,_REQUEST,_ENV。?

當(dāng)然了,也可以應(yīng)用到自定義變量場景。

非常重要的一點是:它很簡單!

2.1 項目背景

這個idea出發(fā)點很簡單,從擴展名稱我們應(yīng)該能猜到它是做什么的。

在性能最優(yōu)的前提下:?

能通俗易懂地簡化HTTP參數(shù)獲取方法

需要對HTTP參數(shù)值進(jìn)行統(tǒng)一過濾、轉(zhuǎn)換、解密操作

獲取HTTP參數(shù)前,需要進(jìn)行一些Predefined Operation

針對HTTP參數(shù)的一切行為,需要同步更新對應(yīng)的PHP Superglobal

聲明時才使用,而非請求一開始就對PHP Superglobals掃蕩式處理

在global語法上,擴展一項能獲取HTTP參數(shù)的能力

So,SG出現(xiàn)就是為了解決上面這些問題而來,它提供了一種更加甜蜜的語法,當(dāng)前已經(jīng)發(fā)布了v3.0.0。

2.2 項目地址

https://github.com/yulonghu/sg?

歡迎大家來提交Issues~

當(dāng)前支持的PHP版本,如下圖所示:

3、SG的特性

簡單,快速,輕量?

零拷貝訪問PHP超全局變量,使用SG會同步更新PHP超全局變量?

支持取值前調(diào)用自定義函數(shù),默認(rèn)情況下,字符串變量會自動調(diào)用 PHP trim?

解決使用PHP超全局變量時出現(xiàn)未定義系列的問題 (Undefined variable, Undefinedoffset)?

采用靜態(tài)方法時,以小數(shù)點代替PHP數(shù)組維度?

采用global聲明方式時,以下劃線代替PHP數(shù)組維度

支持可配置的global $variable查找深度,默認(rèn)一級查找

4、配置項(php.ini)
配置項 權(quán)限 類型 默認(rèn)值 說明
sg.enable PHP_INI_SYSTEM bool 0 0 關(guān)閉 1 開啟
sg.global_level PHP_INI_SYSTEM bool 1 1 只支持一級查找 0 無限制查找
sg.func_name PHP_INI_ALL char trim 默認(rèn)調(diào)用 PHP trim 函數(shù),也支持自定義函數(shù)
5、Hash Map
PHP 超全局變量 SG key (關(guān)鍵字縮寫) global 聲明 函數(shù)
$GLOBALS sg::all()
$_SERVER s global $s sg::get/set/has/del("s")
$_GET g global $g sg::get/set/has/del("g")
$_POST p global $p sg::get/set/has/del("p")
$_FILES f global $f sg::get/set/has/del("f")
$_COOKIE c global $c sg::get/set/has/del("c")
$_SESSION n global $n sg::get/set/has/del("n")
$_REQUEST r global $r sg::get/set/has/del("r")
$_ENV e global $e sg::get/set/has/del("e")
6、流程圖 6.1 global 聲明方式(PHP7)

6.2 函數(shù)方式

7、API 7.1 global 聲明方式
global $g_key, $p_key, $c_key, $s_key, $f_key, $n_key, $e_key, $r_key
7.2 靜態(tài)方法
bool sg::set(string $key, mixed $value)
mixed sg::get(string $key [, mixed $default_value = null])
bool sg::has(string $key)
bool sg::del(string $key [, mixed $... ])
array sg::all(void)
8、例子 8.1 global 聲明例子 8.1.1 sg.global_level = 1

以上例子輸出的結(jié)果:

string(12) "GET_test_key"
string(16) "NEW_GET_test_key"
string(16) "NEW_GET_test_key"
string(16) "NEW_GET_test_key"
string(16) "NEW_GET_test_key"
8.1.2 sg.global_level = 0

以上例子輸出的結(jié)果:

string(12) "GET_test_key"
string(12) "GET_test_key"
string(12) "GET_test_key"
string(12) "GET_test_key"
8.1.3 sg.func_name

以上例子輸出的結(jié)果:

string(8) "A Banana"
8.2 靜態(tài)方法例子 8.2.1 get/set/has/del()

以上例子輸出的結(jié)果:

------------------start
NULL
string(3) "def"
bool(false)
------------------set
bool(true)
------------------get
string(8) "A banana"
string(8) "A banana"
bool(true)
------------------del
bool(true)
------------------get
NULL
bool(false)
8.2.2 sg.func_name

以上例子輸出的結(jié)果:

string(8) "A Banana"
9、性能測試

噼里啪啦說了大半天,性能到底怎么樣呢?我在本地環(huán)境做了一個簡單的ab測試(ab -c100 -n10000),PHP測試代碼如下:

9.1 default - 源碼

9.2 global 聲明方式 - 源碼

ab 測試的結(jié)果如下:

9.3 default - 結(jié)果
$ ab -c100 -n10000 localhost/default.php?key=hello_world
Concurrency Level:      100
Time taken for tests:   1.615 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      251370000 bytes
HTML transferred:       250000000 bytes
Requests per second:    6190.21 [#/sec] (mean)
Time per request:       16.155 [ms] (mean)
Time per request:       0.162 [ms] (mean, across all concurrent requests)
Transfer rate:          151956.36 [Kbytes/sec] received
9.4 global 聲明方式 - 結(jié)果
$ ab -c100 -n10000 localhost/sg.php?key=hello_world
Concurrency Level:      100
Time taken for tests:   1.441 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      251931544 bytes
HTML transferred:       250557708 bytes
Requests per second:    6938.67 [#/sec] (mean)
Time per request:       14.412 [ms] (mean)
Time per request:       0.144 [ms] (mean, across all concurrent requests)
Transfer rate:          170709.87 [Kbytes/sec] received
10、總? 結(jié)

SG具有以下優(yōu)勢:

兼容了當(dāng)前的主流PHP版本?

提供了一種更加甜蜜的語法,豐富了Superglobals的應(yīng)用

我們始終相信:簡單才是王道

注意:global 聲明方式,當(dāng)前只支持不可變變量名。

(360技術(shù)原創(chuàng)內(nèi)容,轉(zhuǎn)載請務(wù)必保留文末二維碼,謝謝~)

關(guān)于360技術(shù)

360技術(shù)是360技術(shù)團隊打造的技術(shù)分享公眾號,每天推送技術(shù)干貨內(nèi)容

更多技術(shù)信息歡迎關(guān)注“360技術(shù)”微信公眾號

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

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

相關(guān)文章

  • 一個超級簡單PHP超全局變量管理擴展

    摘要:介紹全稱,它的誕生為了方便快捷操作預(yù)定義的超全局變量,用戶定義的超全局變量。為了獲得最佳性能,如果滿足條件將改變原始值。 介紹 SG 全稱 Superglobals,它的誕生為了方便快捷操作PHP預(yù)定義的超全局變量,用戶定義的超全局變量。 如果在非CLI模式,SG默認(rèn)托管PHP預(yù)定義的超全局變量, 包括常用 $_GET,$_POST,$_COOOKIE,$_SERVER,$_FILES...

    Anonymous1 評論0 收藏0
  • PHP7源碼分析】PHP中$_POST揭秘

    摘要:和進(jìn)程的啟動過程類似,啟動過程有種進(jìn)程角色啟動進(jìn)程進(jìn)程和進(jìn)程。直到請求到來,將連接賦值給對象的字段。注當(dāng)進(jìn)程執(zhí)行完后會再次調(diào)用函數(shù),準(zhǔn)備監(jiān)聽新的請求。當(dāng)讀取到的時,會調(diào)用函數(shù)對進(jìn)行解析,將中的以及存儲到結(jié)構(gòu)體中。 運營研發(fā)團隊 季偉濱 一、前言 前幾天的工作中,需要通過curl做一次接口測試。讓我意外的是,通過$_POST竟然無法獲取到Content-Type是application...

    sf190404 評論0 收藏0
  • Hello Vue: Vue快速入門教程

    摘要:快速入門教程,此教程包括使用的組件。的核心是能夠使用簡單的模板語法以聲明方式將數(shù)據(jù)呈現(xiàn)給。到目前為止,它看起來并沒有太大的不同。如果我們點擊下拉菜單,我們會得到兩個選擇或。在下拉菜單中選擇不同的選項,上面的文本也將相應(yīng)的發(fā)生變化。 Vue快速入門教程,此教程包括使用Kendo UI for Vue的組件。希望通過此教程能夠成為你學(xué)習(xí)vue的一個很好的起點。這其中還包含一個可擴展的事例,...

    Pines_Cheng 評論0 收藏0
  • Hello Vue: Vue快速入門教程

    摘要:快速入門教程,此教程包括使用的組件。的核心是能夠使用簡單的模板語法以聲明方式將數(shù)據(jù)呈現(xiàn)給。到目前為止,它看起來并沒有太大的不同。如果我們點擊下拉菜單,我們會得到兩個選擇或。在下拉菜單中選擇不同的選項,上面的文本也將相應(yīng)的發(fā)生變化。 Vue快速入門教程,此教程包括使用Kendo UI for Vue的組件。希望通過此教程能夠成為你學(xué)習(xí)vue的一個很好的起點。這其中還包含一個可擴展的事例,...

    RdouTyping 評論0 收藏0
  • Hello Vue: Vue快速入門教程

    摘要:快速入門教程,此教程包括使用的組件。的核心是能夠使用簡單的模板語法以聲明方式將數(shù)據(jù)呈現(xiàn)給。到目前為止,它看起來并沒有太大的不同。如果我們點擊下拉菜單,我們會得到兩個選擇或。在下拉菜單中選擇不同的選項,上面的文本也將相應(yīng)的發(fā)生變化。 Vue快速入門教程,此教程包括使用Kendo UI for Vue的組件。希望通過此教程能夠成為你學(xué)習(xí)vue的一個很好的起點。這其中還包含一個可擴展的事例,...

    DoINsiSt 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<