从 PHP5.3 到 PHP7
php5.3 到 php7 的新增语法,直接上代码
php5.3 的新特性
5.3 添加了新的三元运算写法与匿名函数
$a = null; $a = $a?$a:1; echo $a; $a = null; $a = $a?:1; echo $a; //匿名函数 $x = function(){ echo "xx"; }; $x(); $arr = array(1,3,5,7); function incr($arr){ foreach($arr as $k=>$v){ $arr[$k] = $v += 1; } return $arr; } print_r(incr($arr)); //将操作交给一个匿名函数 function incr1($arr,$callback){ foreach($arr as $k=>$v){ $arr[$k] = $callback($v); } return $arr; } print_r(incr1($arr,function($a){return $a*2;}));
php5.4
php5.4 允许数组使用中括号语法,函数可以当做变量,开放短标签支持,开放 trait 实现一个类继承自多个父类
//函数可以当做一个变量 function getAll(){ return ["a","b","c","d"]; } //5.3 之前需要先赋给一个变量 $a = getAll(); echo $a[3]; //5.4 之后可以直接取 echo getAll()[3]; //对象也可以不用赋给一个变量而调用该对象的方法 该对象用完即会被销毁 class Doc{ public function bark(){ echo "123"; } } (new Doc())->bark(); //开启短标签支持 ?> <?php $title = "OK"; $content = "好的"; ?> <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?=$title;?></title> </head> <body> <?=$content;?> </body> </html> <?php //5.4 添加了二进制的支持 echo 0b11111111; //255 //5.4 允许 trait '萃取' /* php 不允许一个子类继承多个父类 使用 trait 可以模拟继承多个父类 */ trait dog{ public function bark(){ echo "bark"; } } trait bird{ public function fly(){ echo "fly"; } } class Super{ use dog , bird; } //Super 继承了 dog 与 bird2 个对象 (new Super())->bark(); (new Super())->fly();
php5.5
php5.5 之后 empty()函数可以传入一个表达式或一个函数,开放 yield 使函数执行与循环同时进行
// 5.5 以前 empty() 不能传入一个表达式 5.5 以后可以 $a = 3; var_dump(empty($a-3)); function em(){ return array(); } var_dump(empty(em())); //开放 yield 可以省一个变量加一个循环步骤 function getAll1(){ for($i=1;$i<6;$i++){ yield $i; } } foreach(getAll1() as $v){ echo $v."<br>"; }
php5.6
5.6 之前 const 是类内常量,现在可以写在类外,并且可以定义为数组,增加函数可变参数与不定项参数的写法,增加 N 次方操作符
/** * 5.6 新特性 * 之前 const 是类内常量, * 现在可以将 const 写在类外 * 而且常量可以定义为数组 */ const char = ["x","y","z"]; echo char[1]; //可变参数 //写这么一个求和函数 //如果求和参数个数是不确定的, //5.6 可以允许 //之前可以这么写 function sum1($a,$b){ $param = func_get_args(); print_r($param); $a = 0; foreach($param as $v){ $a += $v; } return $a; } echo sum1(1,2,3,4,5,6);//可以实现 //5.6 之后可以这么写 function sum2($a,$b,...$c){ print_r($c); } sum2(1,2,3,4,5,6); //打印 3456 //不定项参数 function test($a ,$b ,$c ,$d){ echo $a,$b,$c,$d,"<br>"; } //如果第一个参数是确定的,后面的参数在一个数组中,那么可以这么给传进去 $num = [2,3,4]; $a = 1; test($a,...$num); //输出 1234 //增加** 求一个数字的 n 次方 echo 2**3; //8 echo 3**3; //27
php7
<?php //php7 的新特性 //以前这么写 $page = isset($_GET['page'])?$_GET['page']:1; //php7 可以这么写 ?? $page = $_GET['page']??1; //判断$_GET['page']是否为 NULL 如果为 NULL 则取 1; echo $page;//输出 1 //php 是一种弱类型语言 //php7 也允许限制变量类型了 function add(int $x,int $y):int{ return $x+$y; } echo add(3,4);//输出 7 echo add(3,4.9);//还是输出 7 在这里会被自动 floor 处理 //php7 支持匿名类 echo (new (class { public $leg = 4; }))->leg;//输出 4 ?>