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新特性简述,希望对大家有所帮助!