欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

PHP7添加非空合并語法分析

今天小編就為大家?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)

商城網(wǎng)站建設(shè)