php5.0后的新特性
一.PHP5.3
1.支持命名空间
2.增加goto语句
public function testStop() { goto aaa; echo 1; aaa: echo 2; }
3.新增两个魔术方法__callStatic() 调用不存在的或者是私有的静态方法时启用,当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
public function __invoke() { // TODO: Implement __invoke() method. echo 222; //$a=new TianYe(); // echo $a(); } public function __toString() { // TODO: Implement __toString() method. //$a=new TianYe(); // echo $a; return 'sss'; } public static function __callStatic($name,$arr){ dd($arr); }
4.添加NowDoc语法的支持
$c='222'; $a=<<< ty dskdkskdks,$c ty; //这种语法默认是双引号解析变量的,所以输出是dskdkskdks,222 //但是如果ty加上单引号 $c='222'; $a=<<< 'ty' dskdkskdks,$c ty; //这时候的解析就是按照单引号解析了,变量不会被解析 //输出是dskdkskdks,$c, //其实就是ty如果什么都不加=="ty",按照双引号解析变量
二 php5.4
1.新增trait
// Traits不能被单独实例化,只能被类所包含 trait SayWorld { public function sayHello() { echo 'World!'; } } class MyHelloWorld { // 将SayWorld中的成员包含进来 use SayWorld; } $xxoo = new MyHelloWorld(); // sayHello() 函数是来自 SayWorld 构件的 $xxoo->sayHello(); //方法覆盖的优先级 class 类的本类中的方法优先级最高,下来就trait的,最后是extends的方法 也就是说如果有同一个方法,最后执行的class本类的方法,trait和父类共有的,执行trait的方法
2.新增短数组的语法
// 原来的数组写法 $arr = array("key" => "value", "key2" => "value2"); $arr = array(1,2,3,4); // 简写形式 $arr = ["key" => "value", "key2" => "value2"]; $arr = [1,2,3,4];
3.对函数如果返回数组可以直接解析了
$a='1,2'; echo explode(',',$a)[1]; exit;
4.新增在实例化的时候返回类的成员
(new Foo())->bar(); //一般如果有构造函数不要这样调用
5.session提供上传进度的支持
通过 $_SESSION["upload_progress_name"]
就可以获得当前文件上传的进度信息,结合 Ajax 就能很容易的实现上传进度条。
6.让json更懂中文
$a=['naame'=>'快递费']; dd(json_encode($a));//{"naame":"\u5feb\u9012\u8d39"}" dd(json_encode($a,JSON_UNESCAPED_UNICODE));//{"naame":"快递费"}
7.默认的编码从ISO-8859-1变为utf-8
三:php5.5
1.新增generators
yield关键字用于当函数需要返回一个迭代器的时候,逐个返回值。
function number10() { for($i = 1; $i <= 10; $i += 1) yield $i;//相当于定义了一个1-10的数组并且返回 } public function testStop() { $a=$this->number10(); foreach ($a as $v){ echo $v,PHP_EOL; }//输出1-10 }
2.foreach支持list
$array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { echo $a.$b\n"; }
越努力越幸运