PHP语法糖

新版本的php发布,会有一些新的语法到加入,这种语法对语言的功能并没有影响,但是更方便编程使用。 语法糖,一些语法技巧,简化了程序员工作.

1.逗号优于点号

$foot = 'hello';
$bar = 'world';
echo $foot . $bar;
echo $foot , $bar;

echo 输出是语言结构,使用 逗号,即把两个变量依次输出,没有占用额外的内存,,但是是用. 则会进行连接操作,链接操作会使用中间变量,占用更多的内存.

2.$i=$i+1比较低效

$i = 0;
$i++;
$i += 1;
$i = $i + 1;

3.用isset代替strlen

strlen()函数函数执行起来相当快,只返回在zval 结构中存储的已知字符串长度。但是由于strlen()是函数,多多少少会有些慢。

示例:

$subject = 'hello world';
if (strlen($subject) < 20) {
    echo 'strlen too short!' . PHP_EOL;
}

if (!isset($subject[20])) {
    echo 'isset too short!' . PHP_EOL;
}

常见的PHP语言结构

  • echo()

  • print()

  • die()

  • isset()

  • unset()

  • include(), include_require()

  • require(), require_once()

  • array()

  • list()

  • empty()

  • eval()

使用语言结构,比使用函数效率高.

所以可以使用上面的方式知道是否是函数 还是php语言的结构

4.用strtr代替str_replace

示例:把Hello 替换成Hi ,world 替换成earth

str_replace 有几个替换则循环几遍,strtr 只会一遍搞定,验证一下:

解析:

  • strtr 只会循环一遍,所以一次替换下来的结果是world Hello

  • str_replace 则会循环两遍,因为有两次替换, 第一次替换的结果为world world, 第二次的替换的结果则变成了Hello Hello

由于底层实现原理的不一样,strtr函数的效率是str_replace函数的四倍。

5.PHP用yield实现协程

好多内部函数,特别是迭代有关的函数应该都有可能进行优化。

狂拽酷炫吊炸天:用 PHP 协程实现多任务协作

6.用 “[]” 定义数组

5.4起新特征,语法上的支持更加显得简洁。

7.用 ** 进行幂运算

语法上的支持更加高效。

8.用 ... 定义变长参数函数

8.函数赋值默认参数:+ 运算符

9.函数赋值默认参数:+ 运算符

  • 运算符,会字符串键值前的值,所以也就是用户传入的值.

10.?? 运算符

7.0 开始支持

11.<=> 比较运算符("太空船"运算符)

语法是这样的:$c = $a <=> $b;

  • 如果$a > $b, $c 的值为1

  • 如果$a == $b, $c 的值为0

  • 如果$a < $b, $c 的值为-1

12.一句话木马

eval 很危险,可以执行语句

比如以下代码,会执行打印出你的系统的目录信息

中间的是dir是命令.

注意:eval 并非函数,而是php的语言函数,所以一下php.ini中如下设置不起作用

Last updated

Was this helpful?