php7 新增功能实例总结
本文实例总结了php7新增功能。分享给大家供大家参考,具体如下:
一、核心
- 增加了groupuse语法声明。RFC:https://wiki.php.net/rfc/group_use_declarations
- 增加了null合并运算符??。RFC:https://wiki.php.net/rfc/isset_ternary
- 64位PHP7字符串长度可以超过2^31次方字节。
- 增加了Closure::call()方法。
- 双引号字符串和heredocs里面支持使用\u{xxxxx}来声明unicode字符。
- define()可以把一个数组定义为常量。
- 增加了合并比较运算符<=>。RFC:https://wiki.php.net/rfc/combined-comparison-operator
- 增加了yieldfrom操作符。https://wiki.php.net/rfc/generator-delegation
- 关键词在特定的场景中也可以使用了。RFC:https://wiki.php.net/rfc/context_sensitive_lexer
- 增加了标量类型声明功能。RFC:https://wiki.php.net/rfc/scalar_type_hints_v5
-
增加接口为用户层提供安全方便的随机数生成器。RFC:https://wiki.php.net/rfc/easy_userland_csprng
①PHP标量类型与返回值类型声明
标量类型声明
默认情况下,所有的PHP文件都处于弱类型校验模式。
PHP7增加了标量类型声明的特性,标量类型声明有两种模式:
-
强制模式(默认)严格模式
-
严格模式
标量类型声明语法格式:
declare(strict_types=1);
代码中通过指定strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。
可以使用的类型参数有:
-
int
-
float
-
bool
-
string
-
interfaces
-
array
-
callable
强制模式实例:
以上程序执行输出结果为:
9
实例汇总将参数4.1转换为整数4后再相加。
严格模式实例:
以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:
PHPFatalerror: UncaughtTypeError:Argument2passedtosum()mustbeofthetypeinteger,stringgiven,calledin……
返回类型声明
PHP7增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型。
可以声明的返回类型有:
-
int
-
float
-
bool
-
string
-
interfaces
-
array
-
callable
返回类型声明实例:
实例中,要求返回结果为整数:
以上程序执行输出结果为:
5
返回类型声明错误实例:
以上程序由于采用了严格模式,返回值必须是int,但是计算结果是float,所以会报错,执行输出结果为:
Fatalerror:UncaughtTypeError:ReturnvalueofreturnIntValue()mustbeofthetypeinteger,floatreturned...
②PHPNULL合并运算符
PHP7新增加的NULL合并运算符(??)是用于执行isset()检测的三元运算的快捷方式。
NULL合并运算符会判断变量是否存在且值不为NULL,如果是,它就会返回自身的值,否则返回它的第二个操作数。
以前我们这样写三元运算符:
$site=isset($_GET['site'])?$_GET['site']:'PHP中文网';
现在我们可以直接这样写:
$site=$_GET['site']??'PHP中文网';
实例
以上程序执行输出结果为:
PHP中文网 PHP中文网 PHP中文网
③PHP太空船运算符(组合比较符)
PHP7新增加的太空船运算符(组合比较符)用于比较两个表达式$a和$b,如果$a小于、等于或大于$b时,它分别返回-1、0或1。
实例
1); print(PHP_EOL); print(1<=>2); print(PHP_EOL); print(2<=>1); print(PHP_EOL); print(PHP_EOL); //PHP_EOL为换行符 //浮点型比较 print(1.5<=>1.5); print(PHP_EOL); print(1.5<=>2.5); print(PHP_EOL); print(2.5<=>1.5); print(PHP_EOL); print(PHP_EOL); //字符串比较 print("a"<=>"a"); print(PHP_EOL); print("a"<=>"b"); print(PHP_EOL); print("b"<=>"a"); print(PHP_EOL); ?>
以上程序执行输出结果为:
0 -1 1 0 -1 1 0 -1 1
④PHP常量数组
在PHP5.6中仅能通过const定义常量数组,PHP7可以通过define()来定义。
实例
以上程序执行输出结果为:
PHP
⑤PHPClosure::call()
PHP7的Closure::call()有着更好的性能,将一个闭包函数动态绑定到一个新的对象实例并调用执行该函数。
实例
x; }; //闭包函数绑定到类A上 $getX=$getXCB->bindTo(newA,'A'); echo$getX(); print(PHP_EOL); //PHP7+代码 $getX=function(){ return$this->x;}; echo$getX->call(newA); ?>
以上程序执行输出结果为:
1 1
⑥PHPCSPRNG
CSPRNG(CryptographicallySecurePseudo-RandomNumberGenerator,伪随机数产生器)。
PHP7通过引入几个CSPRNG函数提供一种简单的机制来生成密码学上强壮的随机数。
-
random_bytes()-加密生存被保护的伪随机字符串。
-
random_int()-加密生存被保护的伪随机整数
random_bytes()
语法格式
stringrandom_bytes(int$length)
参数
-
length-随机字符串返回的字节数。
返回值
-
返回一个字符串,接受一个int型入参代表返回结果的字节数。
实例
以上程序执行输出结果为:
6f36d48a29
random_int()
语法格式
intrandom_int(int$min,int$max)
参数
-
min-返回的最小值,必须是大于或等于PHP_INT_MIN。
-
max-返回的最大值,必须是小于或等于PHP_INT_MAX。
返回值
-
返回一个指定范围内的int型数字。
实例
以上程序执行输出结果为:
723 -64
⑦PHP匿名类
PHP7支持通过newclass来实例化一个匿名类,这可以用来替代一些"用后即焚"的完整类定义。
实例
logger; } publicfunctionsetLogger(Logger$logger){ $this->logger=$logger; } } $app=newApplication; //使用newclass创建匿名类 $app->setLogger(newclassimplementsLogger{ publicfunctionlog(string$msg){ print($msg); }});$app->getLogger()->log("我的第一条日志"); ?>
以上程序执行输出结果为:
我的第一条日志
⑧PHP7use语句
PHP7可以使用一个use从同一个namespace中导入类、函数和常量:
//PHP7之前版本需要使用多次 useusesome\namespace\ClassA; usesome\namespace\ClassB; usesome\namespace\ClassCasC; usefunctionsome\namespace\fn_a; usefunctionsome\namespace\fn_b; usefunctionsome\namespace\fn_c; useconstsome\namespace\ConstA; useconstsome\namespace\ConstB; useconstsome\namespace\ConstC; //PHP7+之后版本可以使用一个use导入同一个namespace的类 usesome\namespace\{ClassA,ClassB,ClassCasC}; usefunctionsome\namespace\{fn_a,fn_b,fn_c}; useconstsome\namespace\{ConstA,ConstB,ConstC}; ?>
二、Opcache模块
- 增加了基于文件的二级opcode缓存机制。可以在php.ini文件中设置opcache.file_cache=
。当服务重启或者SHM重置的时候,使用二级文件缓存机制可以提高性能。 - 也可以设置opcache.file_cache_only=1来限定只使用文件缓存。
- 可以设置opcache.file_cache_consistency_checks=0参数来加快加载速度。
- 可以设置opcache.huge_code_pages=0/1来决定是否将PHPcodepages放到huagepages里面。http://www.laruence.com/2015/10/02/3069.html
- windows版本增加了opcache.file_cache_fallback=1配置项。
三、OpenSSL模块
增加了"alpn_protocols”选项。
四、反射
- 增加了ReflectionGenerator类,用于yieldfromTraces,currentfile/line等等。
- 增加了ReflectionType类,更好的支持新的返回值和标量声明功能。
五、流
windows版本增加了块读取的选项。可以通过传递array("pipe"=>array("blocking"=>true))参数来激活。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。