今天小編就為大家?guī)硪黄狿HP7添加非空合并語法分析的文章。小編覺得挺實(shí)用的,為此分享給大家做個(gè)參考。一起跟隨小編過來看看吧。
10年的全州網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整全州建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“全州網(wǎng)站設(shè)計(jì)”,“全州網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
我們知道從 PHP 5.3 起三元運(yùn)算符有一個(gè)寫法簡潔寫法是這樣的:
<?php $a = 0; $b = $a ?: 1; # $b === 1
這實(shí)際上相當(dāng)于:
<?php $a = 0; $b = $a ? $a : 1; # $b === 1
在 PHP5 中,語法分析是這樣寫的:
| expr '?' { zend_do_begin_qm_op(&$1, &$2 TSRMLS_CC); } expr ':' { zend_do_qm_true(&$4, &$2, &$5 TSRMLS_CC); } expr { zend_do_qm_false(&$$, &$7, &$2, &$5 TSRMLS_CC); } | expr '?' ':' { zend_do_jmp_set(&$1, &$2, &$3 TSRMLS_CC); } expr { zend_do_jmp_set_else(&$$, &$5, &$2, &$3 TSRMLS_CC); }
在 PHP7 中,由于 AST(抽象語法樹)的引入,語法分析有些簡化:
| expr '?' expr ':' expr { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, $3, $5); } | expr '?' ':' expr { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, $1, NULL, $4); }
PHP7 中語法分析之后都是寫到 AST 的節(jié)點(diǎn)上。從上面可以看出,簡化的 ?: 和完整的三元表達(dá)式的區(qū)別就是節(jié)點(diǎn)中間的值為 NULL。
PHP7 添加了一個(gè)合并操作符(T_COALESCE),用于簡化 isset
的條件判斷:
<?php $b = $a ?? 1;
它相當(dāng)于:
<?php $b = isset($a) ? $a : 1;
僅僅是 isset
判斷,在 為等值時(shí)還是會(huì)返回b
的值還是為 0
。
這個(gè)操作符的語法分析語句是:
| expr T_COALESCE expr { $$ = zend_ast_create(ZEND_AST_COALESCE, $1, $3); }
如果想將 isset
換成 empty
的效果,也就是說在變量不存在或轉(zhuǎn)換成 boolean
后為 false
都賦予其他值,需要這樣寫:
<?php $b = $a ?? 1 ?: 1;
顯然上面的表達(dá)式中中間一部分稍微有些多余,那么做些簡化呢?
現(xiàn)在我想添加一個(gè)語法 ??:
,它的作用是對(duì)變量做 empty
的判斷。也就是說達(dá)到上面 $a ?? 1 ?: 1
的效果:
<?php $b = $a ??: 1;
改起來很簡單,只需要將 ?:
和 ??
的分析合并一下(注意這里和上面所有的地方 $1 $2
等符號(hào)的數(shù)字表示的都是變量或者常量出現(xiàn)的位置順序):
| expr T_COALESCE ':' expr { $$ = zend_ast_create(ZEND_AST_CONDITIONAL, zend_ast_create(ZEND_AST_COALESCE, $1, $4), NULL, $4); }
僅僅只有兩句,因?yàn)椴]有在詞法分析器中添加 Token
,所以只能算是個(gè)語法糖。
重新編譯一下之后就能看到效果啦。
測試:
$ /usr/local/php/bin/php -r "\$a = 0; echo \$a ?? 1, PHP_EOL;" 0 $ /usr/local/php/bin/php -r "\$a = 0; echo \$a ??: 1, PHP_EOL;" 1
以上就是PHP7添加非空合并語法的分析內(nèi)容,詳細(xì)使用情況還得要大家自己使用過才能知道具體要領(lǐng)。如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
名稱欄目:PHP7添加非空合并語法分析
網(wǎng)頁地址:http://www.chinadenli.net/article0/googio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)、、網(wǎng)站排名、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)