第一, php7 有加入几十个功能, 主要是以下内容
1, 改进的性能
江湖传说(当然是鸟哥证实过的例子)PHP7 比 PHP5 快两倍, 网上有很多证明例子, 可以自行百度.
2, 降低内存消耗
PHP7 相比已往 PHP 版本使用了更少的资源
3, 标量类型声明
参数和返回值类型可以被强制执行, 怎么理解呢, 就是现在定义参数前面可以像 C 语言或者 java 一样添加数据类型.
比如 function helloworld (int $id){}
4, 支持一致性的 64 位
继续支持 64 位架构机器
5, 改进异常层次结构
异常层次结构得到改善
6, 许多致命错误转换成异常
异常的范围增大覆盖为许多致命的错误转化异常
7, 安全随机数发生器
加入新的安全随机数生成器 API
8, 删除已过时的 API 和扩展
哪些很老旧的和不支持应用程序的扩展被干掉
9, 加入新的空合并运算符(??)
它被用来代替三元运算并与 isset()函数功能, 结合了三元运算符和 isset()函数两者功能.
10, 返回和标量类型声明, 可以支持返回类型和参数类型.
11, 增加了对匿名, 匿名类的支持
12, 零成本声明, 支持零成本加入断言.
13,PHP7 引擎升级到 Zend Engine 3.0
提高了应用程序性能两倍, 比 PHP5.6 低了 50% 的内存消耗, 支持更多的用户并发量, 无需任何额外的硬件, 节省了企业成本.
第二, 具体来看更新了哪些内容
1, 标量类型声明
有两种选择:
(1), 强制 - 强制性是默认模式, 不需要指定.
以下几种类型的函数参数可以通过上述方式强制执行:
int,float,bool,string,interfaces,array,callable
实例:
- <?PHP
- function sum(int ...$ints){
- return array_sum($ints);
- }
- print(sum(2, '3', 4.1));
- ?>
输出: 9
(2), 严格 - 严格模式有明确的暗示.
- <?PHP
- declare(strict_types=1);
- function sum(int ...$ints){
- return array_sum($ints);
- }
- print(sum(2, '3', 4.1));
- ?>
输出: 9
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...
2, 返回类型声明
以下类型返回类型是可以声明的:
- int,float,bool,string,interfaces,array,callable
- <?PHP
- declare(strict_types=1);
- function returnIntValue(int $value): int{
- return $value;
- }
- print(returnIntValue(5));
- ?>
3, 空合并运算符
如果存在且不是 NULL, 空合并运算符返回它的第一个操作数, 否则返回第二个操作数.
$_GET['username'] ?$_GET['username'] :$_POST['username'] 被替换为 $_GET['username'] ?? $_POST['username']
4, 飞船操作符
它是用于比较两个表达式. 当第一个表达式较第二个表达式分别小于, 等于或大于时它分别返回 - 1,0 或 1.
1 <=> 2
5, 常量数组
数组常量现在可以使用 define() 函数定义
define('animals', ['dog','cat','bird'])
6, 匿名类
匿名类现在可以使用 new class 来定义, 用来代替以前的完整类定义.
- $App = new Application;
- $App->setLogger(new class implements Logger {
- public function log(string $msg) {
- print($msg);
- }
- });
- 7,Closure::call()
Closure::call() 方法加入到临时绑定 (bindTo) 的对象范围, 以简便方式封闭和调用它.
- <?PHP
- class A {
- private $x = 1;
- }
- // PHP 7+ code, Define
- $value = function() {
- return $this->x;
- };
- print($value->call(new A));
- ?>
输出: 1
8, 过滤 unserialize()
过滤 unserialize()函数以在反序列化不受信任的数据对象时提供更好的安全性. 它可以防止可能的代码注入, 使开发人员能够使用序列化白名单类.
9, 国际字符
新的 IntlChar 类添加其目的是公开更多的 ICU 功能, 这个类定义了许多可用于操纵 Unicode 字符的静态方法和常数, 你需要在使用这个类之前安装 Intl 扩展.
10,CSPRNG
跨平台的方式加密安全整数和字符串:
random_bytes() - 生成加密安全伪随机字节
random_int() - 生成加密安全伪随机整数
11, 期望
assert() 函数
12,use 语句
单次使用 use 语句可以用来从同一个命名空间导入类, 函数和常量(而不用多次使用 use 语句).
- use com\yiibai\ClassA;
- use com\yiibai\ClassB;
- use com\yiibai\ClassC as C;
改为
use com\yiibai\{ClassA, ClassB, ClassC as C};
13, 错误处理
大多数的错误将通过抛出异常错误处理. 类似于异常, 这些错误异常会冒泡, 直到它们到达第一个匹配的 catch 块. 如果没有匹配的块, 那么会使用 set_exception_handler() 安装一个默认的异常处理并被调用, 并在情况下, 如果没有默认的异常处理程序, 那么该异常将被转换为一个致命的错误, 并会像传统错误那样处理.
14,intdiv()函数
它执行操作数的整数除法并返回结果为 int 类型
15,Session 选项
session_start()函数接受数组参数覆盖在 PHP.INI 中设置的会话配置指令. 这些选项支持 session.lazy, 在默认情况下如果 PHP 会话数据改变, 那么会覆盖任何会话数据信息.
16, 弃用的功能
以下功能被弃用:
(1),PHP4 风格的构造函数
- <?PHP
- class A {
- function A() {
- print('Style Constructor');
- }
- }
- ?>
(2), 静态调用非静态方法
- <?PHP
- class A {
- function b() {
- print('Non-static call');
- }
- }
- A::b();
- ?>
(3),password_hash()函数的 salt 选项
(4),capture_session_meta,SSL 上下文选项.
17, 删除一些扩展
ereg,mssql,MySQL,sybase_ct
18, 删除一些 SAPI
aolserver,apache,apache_hooks,apache2filter,caudium,continuity,isapi,milter,nsapi
来源: http://www.jianshu.com/p/62f278ecd43a