php7 新的引擎,php7新特性

PHP7新特性

1. 指定参数接收类型,格式: function 方法名(参数类型 $arg) { }

示例如: function abc(int $a) { echo $a; }

2. 函数,类函数 均增加支持返回值类型(基本类型如int,float,array等和自定义类名,自定义接口名),

function 方法名(参数, 参数可选): 返回值类型 { }

如:

function sum($a, $b): float { //返回浮点型数值

return $a + $b;

}

3. 参数类型验证级别声明

declare(strict_types=1); //如果是strict_types=1 类型的强制校验,strict_types=0不强制校验,只做简单验证

4. null合并运算符 ?? 如果变量值不为null则返回,否则返回第2个参数值

$username = $data['user'] ?? 'nobody';

等价

$username = isset($data['user']) ? $data['user'] : 'nobody';

$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';

5. 太空船操作符(组合比较符): <=> 两边值相等返回0,前面大于后面返回1,前面小于后面返回-1

echo 1 <=> 1; // 0

echo 1 <=> 2; // -1

echo 2 <=> 1; // 1

6. define()函数定义常量值为数组

define('ALL_ENV', [

'dev',

'qa',

'test'

]);

echo ALL_ENV[1] . PHP_EOL; // 输出 "qa"

define("LOG_EVEL", "info");

echo LOG_EVEL . PHP_EOL; //info

echo LOG_EVEL[2] . PHP_EOL; //f

php5.6对应const常量可以定义为数组: const abc = ['a', 'hi'];

7. 支持匿名类: 用于创建一次性简单对象,http://php.net/manual/zh/language.oop5.anonymous.php

匿名类语法: new class {}

匿名类继承类: new class extends 类名 {}

匿名类实现接口: new class implements 接口名{ }

8. 闭包增加call方法: 闭包名->call(类对象); 这样就把闭包作为类对象的方法且被执行

9. 新增intl扩展(类名IntlChar): 用于操作多字符集的 unicode 字符, http://php.net/manual/zh/class.intlchar.php

10. 命名空间在php5.3开始就有,php7开始对同一个命名空间的导入的类、函数和常量可以通过单个 use 语句批量导入.

命名空间下可以定义: 类(包括普通类,抽象类和traits)、接口、函数和常量

命名空间下常量: const 常量名=值;

http://php.net/manual/zh/language.namespaces.importing.php

命名空间导入(php5.3开始就支持):

use My\Full\Classname类名 as Another别名;

use My\Full\Classname类名;

$obj = new namespace\Another; 表示实例化当前命名空间下的Another类

$obj = new Another; 表示实例化My\Full\Classname类

php5.6开始支持use导入单个函数:

use function My\Full\functionName命名空间下的方法名;

use function My\Full\functionName命名空间下的方法名 as func别名;

php5.6开始支持单个常量导入:

use const My\Full\CONSTANT命名空间下的常量名;

php7支持命名空间下的类,常量,方法批量导入:

批量导入类: use some\namespace\{ClassA类A, ClassB类B, ClassC类C as C别名};

批量导入方法: use function some\namespace\{fn_a, fn_b, fn_c};

批量导入常量: use const some\namespace\{ConstA, ConstB, ConstC};

11. 新增了一些方法 http://php.net/manual/zh/migration70.new-functions.php

整数除法函数: intdiv(除数, 被除数);返回int值

12. 新增了一些类,如ReflectionType等: http://php.net/manual/zh/migration70.classes.php

13. 新增了一些常量: http://php.net/manual/zh/migration70.constants.php

14. php的session_start([选项配置可选]);

该方法支持可选参数来配置sesion(php7之前是在php.ini或者在调用session_start()函数前用ini_set()来定义)

如: // 会话选项配置见: http://php.net/manual/zh/session.configuration.php

session_start([

'name'=>'token',

'use_cookies'=>0

'use_trans_sid'=>1,

]);

以上等价:

ini_set('session.name', 'token');

ini_set("session.use_cookies", 0);

ini_set("session.use_trans_sid", 1);

session_start();

15.php7支持** 运算符, <=>、**、?? 、\u{xxxx}操作符

echo 2 ** 3; //php7才支持

等价

echo pow(2, 3) . PHP_EOL;//php5和php7都支持

16. func_get_args()获取的是当前方法的所有参数值,但php5和php7有区别.如下:

test(123);//php5中是123, php7中是124

function test ($num) {

$num++;

var_dump(func_get_args()[0]);

//php5中是123, php7中是124 说明在php5中$num参数不能影响func_get_args的第1个参数

//php7中说明test方法的第1个参数值变化会影响func_get_args()的第1个参数

};

17. php7捕获错误

try {

echo helloJelly('1'); //调用未定义的函数, php7抛出Error级别错误捕获

} catch (Exception $e) {

echo 'Exception' . PHP_EOL;

} catch (Error $e) {

echo 'Error: 调用不存在的函数' . PHP_EOL;

}

php7废弃的特性

1. 16进制的字符串转换被废除了: 如php5中0x10和16是相等的,php7中是不相等的

//PHP5 是相等的

"0x10" == "16"

//PHP7中是不相等的

"0x10" != "16"

2. HTTP_RAW_POST_DATA移除了(可以使用file_get_contents("php://input");替代)

3. 短标记语法被移除: <?和 <? language=“php”这样的标签被移除了

4. 移除SAPIs的支持

5. 移除一些旧扩展,如PECL, mysql

6. 静态函数里面不再支持通过一个不兼容的$this调用一个非静态的函数了

7. $o = & new className{},不再支持这样的写法

8. php.ini文件移除了#作为注释,统一用;去注释

9. String、int、float等关键字不能被作为类名使用

10. preg_replace()不再支持匹配模式/e

11.移除一些函数,类,扩展等

other-上传区别

//PHP5

curl_setopt(ch, CURLOPT_POSTFIELDS,

array(

'file' => '@'.realpath('image.png'),

));

//PHP7

curl_setopt(ch, CURLOPT_POSTFIELDS,

[

'file' => new \CURLFile(realpath('image.png')),

]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值