1:标量类型声明

有两种模式: 强制 (默认) 和 严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。它们扩充了PHP5中引入的其他类型:类名,接口,数组和 回调类型。在旧版中,函数的参数申明只能是(Array $arr)、(CLassName $obj)等,基本类型比如Int,String等是不能够被申明的

// 定义一个函数, 参数和函数返回值必须为整型

function check(int $bool)

{

var_dump($bool);

}

check(1);

check(true);

若无强制类型转换,会输入int(1)bool(true)。转换后会输出bool(true) bool(true)

2: 返回值类型声明

PHP 7 增加了对返回类型声明的支持。返回类型声明指明了函数返回值的类型。可用的类型与参数声明中可用的类型相同。

function arraysSum(array ...$arrays): array

{

return array_map(function(array $array): int {

return array_sum($array);

}, $arrays);

}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

以上例程会输出:

Array

(

[0] => 6

[1] => 15

[2] => 24

)

3: null合并运算符

项目中存在大量同时使用三元表达式和 isset()的情况,新增了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

// 旧版

isset($_GET['id']) ? $_GET[id] : err;

//新版

$_GET['id'] ?? 'err';

// 跟上例代码结果一致,可以减少php7以前大量使用isset或empty

4: 太空船操作符 (<=>)组合比较符

太空船操作符用于比较两个表达式。当$a小于、等于或大于$b时它分别返回-1、0或1。 比较的原则是沿用 PHP 的常规比较规则进行的。

// Integers

echo 1 <=> 1; // 0

echo 1 <=> 2; // -1

echo 2 <=> 1; // 1

// Floats

echo 1.5 <=> 1.5; // 0

echo 1.5 <=> 2.5; // -1

echo 2.5 <=> 1.5; // 1

// Strings

echo "a" <=> "a"; // 0

echo "a" <=> "b"; // -1

echo "b" <=> "a"; // 1

5:通过define()定义常量数组

define('ANIMALS', ['dog', 'cat', 'bird']);

echo ANIMALS[1]; // outputs "cat"

6: 匿名类 new class

现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

interface Logger

{

public function log(string $msg);

}

class Application

{

private $logger;

public function getLogger(): Logger {

return $this->logger;

}

public function setLogger(Logger $logger) {

$this->logger = $logger;

}

}

$app = new Application;

$app->setLogger(new class implements Logger {

public function log(string $msg) {

echo $msg;

}

});

var_dump($app->getLogger());

7: Unicode codepoint 转译语法

这接受一个以16进制形式的 Unicode codepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。 可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。

echo "\u{9876}"

8: Closure::call()

Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。

class Test{public $name = "lixuan";}

//PHP7和PHP5.6都可以

$getNameFunc = function(){return $this->name;};

$name = $getNameFunc->bindTo(new Test, 'Test');

echo $name();

//PHP7可以,PHP5.6报错

$getX = function() {return $this->name;};

echo $getX->call(new Test);

9:为unserialize()提供过滤

这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。

//将所有对象分为__PHP_Incomplete_Class对象

$data = unserialize($foo, ["allowed_classes" => false]);

//将所有对象分为__PHP_Incomplete_Class 对象 除了ClassName1和ClassName2

$data = unserialize($foo, ["allowed_classes" => ["ClassName1", "ClassName2"]);

//默认行为,和 unserialize($foo)相同

$data = unserialize($foo, ["allowed_classes" => true]);

10: IntlChar

新增加的 IntlChar 类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。Intl是Pecl扩展,使用前需要编译进PHP中,也可apt-get/yum/port install php5-intl

printf('%x', IntlChar::CODEPOINT_MAX);

echo IntlChar::charName('@');

var_dump(IntlChar::ispunct('!'));

以上例程会输出:

10ffff

COMMERCIAL AT

bool(true)

11:预期

预期是向后兼用并增强之前的 assert() 的方法。 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。 老版本的API出于兼容目的将继续被维护,assert()现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的 string或一个待测试的boolean。

ini_set('assert.exception', 1);

class CustomError extends AssertionError {}

assert(false, new CustomError('Some error message'));

以上例程会输出:

Fatal error: Uncaught CustomError: Some error message

12:Group use declarations

从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了。

//PHP7之前

use some\namespace\ClassA;

use some\namespace\ClassB;

use some\namespace\ClassC as C;

use function some\namespace\fn_a;

use function some\namespace\fn_b;

use function some\namespace\fn_c;

use const some\namespace\ConstA;

use const some\namespace\ConstB;

use const some\namespace\ConstC;

// PHP7之后

use some\namespace\{ClassA, ClassB, ClassC as C};

use function some\namespace\{fn_a, fn_b, fn_c};

use const some\namespace\{ConstA, ConstB, ConstC};

13:intdiv()

接收两个参数作为被除数和除数,返回他们相除结果的整数部分。

var_dump(intdiv(7, 2));

以上例程会输出:

int(3)

14:CSPRNG

新增两个函数: random_bytes() and random_int().可以加密的生产被保护的整数和字符串。我这蹩脚的翻译,总之随机数变得安全了。

random_bytes — 加密生存被保护的伪随机字符串

random_int —加密生存被保护的伪随机整数

15:preg_replace_callback_array()

新增了一个函数preg_replace_callback_array(),使用该函数可以使得在使用preg_replace_callback()函数时代码变得更加优雅。在PHP7之前,回调函数会调用每一个正则表达式,回调函数在部分分支上是被污染了。

16:Session options

现在,session_start()函数可以接收一个数组作为参数,可以覆盖php.ini中session的配置项。

比如,把cache_limiter设置为私有的,同时在阅读完session后立即关闭。

session_start([

'cache_limiter' => 'private',

'read_and_close' => true,

]);

17:生成器的返回值

在PHP5.5引入生成器的概念。生成器函数每执行一次就得到一个yield标识的值。在PHP7中,当生成器迭代完成后,可以获取该生成器函数的返回值。通过Generator::getReturn()得到。

function generator()

{

yield 1;

yield 2;

yield 3;

return "a";

}

$generatorClass = ("generator")();

foreach ($generatorClass as $val)

{

echo $val.” “;

}

echo $generatorClass->getReturn();

以上例程会输出:

1 2 3 a

18:生成器中引入其他生成器

在生成器中可以引入另一个或几个生成器,只需要写yield from functionName1

function generator1()

{

yield 1;

yield 2;

yield from generator2();

yield from generator3();

}

function generator2()

{

yield 3;

yield 4;

}

function generator3()

{

yield 5;

yield 6;

}

foreach (generator1() as $val)

{

echo $val, " ";

}

以上例程会输出:

1 2 3 4 5 6

php新增的特性,PHP7新增特性相关推荐

  1. VMware SDS之五 - VMware刚公布第四代VSAN - 超融合软件VSAN 6.2新增了哪九大特性?

    2016年2月10日,VMware公布了VSAN 6.2,这已经是第四代VSAN,与第三代(VSAN 6.1,在2015年9月发布)时隔不到半年.我们可以看出VMware软件定义存储在数据平面的突飞猛 ...

  2. 【PHP】PHP7新特性

    PHP7新特性 PHP7.0 PHP7.0新特性 PHP7.0 变化 PHP7.1 PHP7.1新特性 PHP7.1变化 PHP7.2 PHP7.2新特性 PHP7.2变更 PHP7.3 PHP7.3 ...

  3. php标量类型包括,php7新特性之标量类型声明

    标量类型声明 什么是标量类型?首先要清楚这一点,标量类型(Scalar type)是相对复合类型(Compound type)来说的:标量类型只能有一个值,而复合类型可以包含多个值.复合类型是由标量类 ...

  4. php7 ast,PHP7新特性之抽象语法树(AST)带来的变化详解

    本文分析了PHP7新特性之抽象语法树(AST)带来的变化.分享给大家供大家参考,具体如下: 这里大部分内容参照 AST 的 RFC 文档而成:https://wiki.php.net/rfc/abst ...

  5. php7的新特性有哪些,php7新特性有哪些?

    php7新特性有:将PHPNG代码合并到PHP7中:降低内存消耗:标量类型声明,可以强制执行参数和返回类型:一致的64位支持:改进了异常层次:已弃用的SAPI和扩展被删除:添加了新的空合并运算符(?) ...

  6. PHP7新特性(常用)

    PHP7新特性(常用) 致命错误将可用异常形式抛出 ?? null合并运算符 标量类型声明 返回值类型声明 太空船操作符<=>(组合比较符) 致命错误将可用异常形式抛出 在php7之后,大 ...

  7. php7.4新特性 多线程,PHP7新特性WhatwillbeinPHP7/PHPNG

    PHP7将在2015年10月正式发布,我们来看看官网给出的php7 特性 官网: http://www.php7.ca/ https://wiki.php.com/phpng PHP7新特性( Wha ...

  8. PHP7新特性和废弃的函数

    一篇写给准备升级PHP7的小伙伴的文章 https://blog.csdn.net/u011957758/article/details/73320083 PHP7新特性 https://lvtao. ...

  9. PHPStorm使用PHP7新特性出现红色波浪错误

    今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的 ...

  10. web前端入门学习 css(8)(新增语义化标签、video/audio、新增input类型、新增表单属性、属性选择器、结构伪类选择器、伪元素选择器、css3盒子模型、模糊、calc函数、过渡

    https://www.bilibili.com/video/BV1pE411q7FU?p=276 文章目录 html5新特性 html5新增语义化标签 header头部 nav导航 article内 ...

最新文章

  1. pandas按条件过滤_pandas条件组合筛选和按范围筛选的示例代码
  2. VTK修炼之道14:图像处理_创建
  3. 【C++、Matlab】VS2013 C++读写.mat文件
  4. Spring Boot 定时任务,怎么实现任务动态增删启停?
  5. sklearn机器学习之特征工程
  6. Linux下出现command not found的解决办法
  7. Android USB通信开发总结和热敏打印机开发实例解析
  8. ubuntu20.04不是所有者所以不能更改权限
  9. 史上最详细Lip-reading with Hierarchical Pyramidal Convolution and Self-Attention文章记录
  10. 基于FPGA的数字混频器设计与仿真
  11. 大一计算机课程学什么,大一新生应该如何学习 主要学什么课程
  12. IDEA环境下SpringBoot项目,@Resource或@Autowired报错could not autowire
  13. 百度平台上的网络舆情信息怎么搜查的方法
  14. 【gulp】什么是gulp?有什么用?怎么用?
  15. 物体结构图,快速图解物体内部结构
  16. Spring概述及IOC(控制反转) Part I
  17. 2022年,国外8个可免费发外链、软文及新闻稿的网址
  18. 从婚恋网站危机到6千亿元蛋糕
  19. 转换为本地时间 java_UTC时间转换为本地时间(JAVA)
  20. 4K技术频抢戏 OLED电视现身更待何时

热门文章

  1. 视听杂志视听杂志社视听编辑部2022年第6期目录
  2. 蓝桥杯第七届省赛 模拟风扇控制系统 by YYC
  3. Gtalk怎么样绑定MSN帐号?
  4. JavaScript 【99乘法表】【案例】
  5. D-013 蜂鸣器硬件电路设计
  6. 古训:能控制早晨的人,方可控制人生(经典)
  7. NOIWC2018滚粗记
  8. UART数据发送和接收(Verilog)
  9. 编译原理 词法分析实验 流程图传不上去,不传了
  10. 同一台计算机同时安装多个打印机,r230驱动-同一台电脑可不可以装两台同品牌同型号的打印 – 手机爱问...