hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

给 PHP7 添加一个“非空合并”语法糖_后端开发

2020-05-29后端开发ki4网11°c
A+ A-

php如何实现将字符串转换成数组_后端开发

php实现将字符串转换成数组的方法是:可以先将字符串分割为单个字符并存放到数组中,然后打印数组即可,具体代码如【trim(chunk_split($m,1,'.'),'.');$arr1=explode('.',$res)】。


我们知道从 PHP 5.3 起三元运算符 ? : 有一个写法简洁写法是这样的:

<?php
$a = 0;
$b = $a ?: 1; # $b === 1

这实际上相当于:

<?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 的节点上。从上面可以看出,简化的 ?: 和完整的三元表达式的区别就是节点中间的值为 NULL。

PHP7 添加了一个合并操作符(T_COALESCE),用于简化 isset 的条件判断:

<?php
$b = $a ?? 1;

它相当于:

<?php
$b = isset($a) ? $a : 1;

仅仅是 isset 判断,在 为等值时还是会返回b 的值还是为 0 。

5个常用 Python 标准库_后端开发

5个常用 Python 标准库:1、提供与操作系统相关联的函数库os;2、通常用于命令行参数的库sys;3、用于生成随机数的random库;4、math库提供了数学常数和数学函数;5、日期和时间的操作库datetime。

这个操作符的语法分析语句是:

|   expr T_COALESCE expr
        { $$ = zend_ast_create(ZEND_AST_COALESCE, $1, $3); }

如果想将 isset 换成 empty 的效果,也就是说在变量不存在或转换成 boolean 后为 false 都赋予其他值,需要这样写:

<?php
$b = $a ?? 1 ?: 1;

显然上面的表达式中中间一部分稍微有些多余,那么做些简化呢?

现在我想添加一个语法 ??: ,它的作用是对变量做 empty 的判断。也就是说达到上面 $a ?? 1 ?: 1 的效果:

<?php
$b = $a ??: 1;

改起来很简单,只需要将 ?: 和 ?? 的分析合并一下(注意这里和上面所有的地方 $1 $2 等符号的数字表示的都是变量或者常量出现的位置顺序):

|   expr T_COALESCE ':' expr
        { $$ = zend_ast_create(ZEND_AST_CONDITIONAL,
            zend_ast_create(ZEND_AST_COALESCE, $1, $4), NULL, $4); }

仅仅只有两句,因为并没有在词法分析器中添加 Token,所以只能算是个语法糖。

重新编译一下之后就能看到效果啦。测试:

$ /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

Enjoy IT!

推荐教程:《PHP7》

以上就是给 PHP7 添加一个“非空合并”语法糖的详细内容,更多请关注ki4网其它相关文章!

PHP 与 Go 的语法区别_后端开发

Go 是由 Google 设计的一门静态类型的编译型语言。它有点类似于 C,但是它包含了更多的优点,比如垃圾回收、内存安全、结构类型和并发性。它的并发机制使多核和网络机器能够发挥最大的作用。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
给 PHP7 添加一个“非空合并”语法糖_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>