PHP7新特性简述
类型声明
看代码,一目了然了。
classperson { publicfunctionage(int$age):string { return'Ageis'.$age; } }
命名空间与use关键字批量声明
非混合模式
usePublishers\Packt\{Book,Ebook,Video}; usefunctionPublishers\Packt\{getBook,saveBook}; useconstPublishers\Packt\{COUNT,KEY};
混合模式
usePublishers\Packt\{ Book, Ebook, Video, functiongetBook, functionsaveBook, constCOUNT, constKEY };
复合模式
usePublishers\Packt\{ Paper\Book, Electronic\Ebook, Media\Video };
匿名类
匿名类的声明与使用时同时进行的,具备其他类所具备的所以功能,区别在于匿名类没有类名。语法如下:
newclass(argument){definition};
匿名类是没有类名的,但在PHP内部,会在内存的引用地址表中为其分配一个全局唯一的名称。
$name=newclass('You'){ publicfunction__construct($name) { echo$name; } };
匿名类可以继承父类及父类的方法。
classPackt { protected$number; publicfunction__construct() { echo'parentconstruct'; } publicfunctiongetNumber():float { return$this->number; } } $number=newclass(5)extendsPackt { publicfunction__construct(float$number) { parent::__construct(); $this->number=$number; } }; echo$number->getNumber();
匿名类可以继承接口。
interfacePublishers { publicfunction__construct(stringname,stringaddress); publicfunctiongetName(); publicfunctiongetAddress(); } classpackt { protected$number; protected$name; protected$address; publicfunction... } $info=newclass('name','address')extendsPacktimplementPublishers { publicfunction__construct(string$name,string$address) { $this->name=$name; $this->address=$address; } publicfunctiongetName():string { return$this->name; } publicfunctiongetAddress():string { return$this->address; } } echo$info->getName().''.$info->getAddress();
匿名类可以嵌套在一个类中使用。
classMath { public$first_number=10; public$second_number=10; publicfunctionadd():float { return$this->first_number+$this->second_number; } publicfunctionmutiply_sum() { returnnewclass()extendsMath { publicfunctionmutiply(float$third_number):float { return$this->add()*$third_number; } }; } } $math=newMath(); echo$math->mutiply_sum()->mutiply(2);
摒弃老式构造函数
从PHP4开始,构造函数可以通过命名与类名一致的方式来声明自己是构造函数,在PHP7中这种方式声明构造函数依然可以使用,但不推荐使用,会输出不推荐的信息Deprecated:MethodswiththesamenameastheirclasswillnotbeconstructorsinafutureversionofPHP;Packthasadeprecatedconstructorin...,PHP7中推荐使用__construct()。
throwable接口
从PHP7开始,程序中的fatal错误都可以被截获,PHP7提供了throwable接口,异常与错误都继承于这个接口。
Error
现在大多数的fatal错误情况会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获。
try { ... }catch(Error$e) { echo$e->getMessage(); }
一些错误情况只有error的子实例会被抛出,例如TypeError、DivisionByZeroError、ParseError等。
<=>操作符
<=>操作符将==、<、>三个比较操作符打包在了一起,具体使用规则如下。
操作符两边相等时返回0
操作符左边小于右边时返回-1
操作符左边大于右边时返回1
null合并运算符
??合并运算符,在第一操作数存在时可被直接返回,否则返回第二操作数。
$title=$post['title']??NULL; $title=$post['title']??$get['title']??'Notitle';
uniform变量语法
$first=['name'=>'second']; $second='two'; echo$$first['name']; echo${Sfirst['name']};//PHP7 ... echo$object->$methods['title']; echo$object->{$methods['title']};//PHP7
主要是因为PHP7与之前版本PHP的解析方式不一样,在PHP7中加上花括号就可以啦,就像上边代码这样,否则会报错。
常量数组
从PHP5.6开始常量数组可以用const关键字来声明,在PHP7中常量数组可以通过define函数来初始化。
constSTORES=['en','fr','ar'];//php5.6 define('STORES',['en','fr','ar']);//php7
switch中的default默认值
在PHP7之前,switch语句中允许多个default默认值,从PHP7开始,只能有一个default默认值,否则会产生fatal级别错误。
//php7之前 switch(true){ case'value': #code... break; default: #code... break; default: #code... break; } //php7 switch(true){ case'value': #code... break; default: #code... break; }
session_start函数中的选项数组
在PHP7之前,使用session的时候都必须先调用session_start()函数,且这个函数并没有参数需要传递,所有session相关的配置都在php.ini文件中,从PHP7开始,可以在调用这个函数时传递参数选项数组,这些设置信息将覆盖php.ini中的session配置。
session_start([ 'cookie_lifetime'=>3600, 'read_and_close'=>true ]);
unserialize函数引入过滤器
unserialize()可以反序列化任何类型的对象,没有任何过滤项,不安全,PHP7在unserialize()中引入了过滤器,且默认允许反序列化所有类型的对象。
$result=unserialize($object,['allowed_classes'=>['Book','Ebook']]);
以上所述是小编给大家介绍的PHP7新特性简述,希望对大家有所帮助!