在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
新特性1.可为空(Nullable)类型类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null 。可以通过在类型前面加上一个问号来使之成为可为空的。
以上例程会输出:
2.Void 函数在PHP 7 中引入的其他返回值类型的基础上,一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,null 不是一个合法的返回值。
以上例程会输出:
试图去获取一个 void 方法的返回值会得到 null ,并且不会产生任何警告。这么做的原因是不想影响更高层次的方法。 3.短数组语法 Symmetric array destructuring短数组语法([])现在可以用于将数组的值赋给一些变量(包括在foreach中)。 这种方式使从数组中提取值变得更为容易。
4.类常量可见性现在起支持设置类常量的可见性。
5.iterable 伪类现在引入了一个新的被称为iterable的伪类 (与callable类似)。 这可以被用在参数或者返回值类型中,它代表接受数组或者实现了Traversable接口的对象。 至于子类,当用作参数时,子类可以收紧父类的iterable类型到array 或一个实现了Traversable的对象。对于返回值,子类可以拓宽父类的 array或对象返回值类型到iterable。
6.多异常捕获处理一个catch语句块现在可以通过管道字符(|)来实现多个异常的捕获。 这对于需要同时处理来自不同类的不同异常时很有用。
7.list()现在支持键名现在list()支持在它内部去指定键名。这意味着它可以将任意类型的数组 都赋值给一些变量(与短数组语法类似)
8.支持为负的字符串偏移量现在所有接偏移量的内置的基于字符串的函数都支持接受负数作为偏移量,包括数组解引用操作符([]).
以上例程会输出:
9.ext/openssl 支持 AEAD通过给openssl_encrypt()和openssl_decrypt() 添加额外参数,现在支持了AEAD (模式 GCM and CCM)。
以上例程会输出:
10.异步信号处理 Asynchronous signal handlingA new function called pcntl_async_signals() has been introduced to enable asynchronous signal handling without using ticks (which introduce a lot of overhead).
以上例程会输出:
11.HTTP/2 服务器推送支持 ext/curlSupport for server push has been added to the CURL extension (requires version 7.46 and above). This can be leveraged through the curl_multi_setopt() function with the new CURLMOPT_PUSHFUNCTION constant. The constants CURL_PUST_OK and CURL_PUSH_DENY have also been added so that the execution of the server push callback can either be approved or denied. 不兼容性1.当传递参数过少时将抛出错误在过去如果我们调用一个用户定义的函数时,提供的参数不足,那么将会产生一个警告(warning)。 现在,这个警告被提升为一个错误异常(Error exception)。这个变更仅对用户定义的函数生效, 并不包含内置函数。例如:
输出:
2.禁止动态调用函数禁止动态调用函数如下
输出
3.无效的类,接口,trait名称命名以下名称不能用于 类,接口或trait 名称命名: 4.Numerical string conversions now respect scientific notationInteger operations and conversions on numerical strings now respect scientific notation. This also includes the (int) cast operation, and the following functions: intval() (where the base is 10), settype(), decbin(), decoct(), and dechex(). 5.mt_rand 算法修复mt_rand() will now default to using the fixed version of the Mersenne Twister algorithm. If deterministic output from mt_srand() was relied upon, then the MT_RAND_PHP with the ability to preserve the old (incorrect) implementation via an additional optional second parameter to mt_srand(). 6.rand() 别名 mt_rand() 和 srand() 别名 mt_srand()rand() and srand() have now been made aliases to mt_rand() and mt_srand(), respectively. This means that the output for the following functions have changes: rand(), shuffle(), str_shuffle(), and array_rand(). 7.Disallow the ASCII delete control character in identifiersThe ASCII delete control character (0x7F) can no longer be used in identifiers that are not quoted. 8.error_log changes with syslog valueIf the error_log ini setting is set to syslog, the PHP error levels are mapped to the syslog error levels. This brings finer differentiation in the error logs in contrary to the previous approach where all the errors are logged with the notice level only. 9.在不完整的对象上不再调用析构方法析构方法在一个不完整的对象(例如在构造方法中抛出一个异常)上将不再会被调用 10.call_user_func()不再支持对传址的函数的调用call_user_func() 现在在调用一个以引用作为参数的函数时将始终失败。 11.字符串不再支持空索引操作符 The empty index operator is not supported for strings anymore对字符串使用一个空索引操作符(例如=x)将会抛出一个致命错误, 而不是静默地将其转为一个数组 12.ini配置项移除下列ini配置项已经被移除: PHP 7.1.x 中废弃的特性1.ext/mcryptmcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。 2.mb_ereg_replace()和mb_eregi_replace()的Eval选项对于mb_ereg_replace()和mb_eregi_replace()的 e模式修饰符现在已被废弃 ===================================== PHP7.0新特性1.空合并运算符(??)简化判断
相当于:
2.变量类型声明两种模式 : 强制 ( 默认 ) 和 严格模式
3.返回值类型声明函数和匿名函数都可以指定返回值的类型
4.太空船操作符(组合比较符)太空船操作符用于比较两个表达式。当 于b 时它分别返回 -1 、 0 或 1 。 比较的原则是沿用 PHP 的常规比较规则进行的。
5.匿名类现在支持通过 new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。
6.Unicode codepoint 转译语法这接受一个以16进制形式的 Unicode codepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。 可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。
旧版输出:\u{9876} 7.Closure::call()Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。
8.为unserialize()提供过滤这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。
9.IntlChar新增加的 IntlChar 类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。Intl是Pecl扩展,使用前需要编译进PHP中,也可apt-get/yum/port install php5-intl
以上例程会输出: 10.预期预期是向后兼用并增强之前的 assert() 的方法。 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。 老版本的API出于兼容目的将继续被维护,assert()现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的 string或一个待测试的boolean。
以上例程会输出: 11.Group use declarations从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句 一次性导入了。
12.intdiv()接收两个参数作为被除数和除数,返回他们相除结果的整数部分。
输出int(3) 13.CSPRNG新增两个函数: random_bytes() and random_int().可以加密的生产被保护的整数和字符串。总之随机数变得安全了。 14、preg_replace_callback_array()新增了一个函数preg_replace_callback_array(),使用该函数可以使得在使用preg_replace_callback()函数时代码变得更加优雅。在PHP7之前,回调函数会调用每一个正则表达式,回调函数在部分分支上是被污染了。 15、Session options现在,session_start()函数可以接收一个数组作为参数,可以覆盖php.ini中session的配置项。
16、生成器的返回值在PHP5.5引入生成器的概念。生成器函数每执行一次就得到一个yield标识的值。在PHP7中,当生成器迭代完成后,可以获取该生成器函数的返回值。通过Generator::getReturn()得到。
输出为:1 2 3 a 17、生成器中引入其他生成器在生成器中可以引入另一个或几个生成器,只需要写yield from functionName1
输出:1 2 3 4 5 6 18.通过define()定义常量数组
不兼容性1、foreach不再改变内部数组指针在PHP7之前,当数组通过 foreach 迭代时,数组指针会移动。现在开始,不再如此,见下面代码。
PHP5输出: 2、foreach通过引用遍历时,有更好的迭代特性当使用引用遍历数组时,现在 foreach 在迭代中能更好的跟踪变化。例如,在迭代中添加一个迭代值到数组中,参考下面的代码:
PHP5输出: 3、十六进制字符串不再被认为是数字含十六进制字符串不再被认为是数字
PHP5输出: 4、PHP7中被移除的函数被移除的函数列表如下: 5、new 操作符创建的对象不能以引用方式赋值给变量new 操作符创建的对象不能以引用方式赋值给变量
PHP5输出: 6、移除了 ASP 和 script PHP 标签使用类似 ASP 的标签,以及 script 标签来区分 PHP 代码的方式被移除。 受到影响的标签有:<% %>、<%= %>、 7、从不匹配的上下文发起调用在不匹配的上下文中以静态方式调用非静态方法, 在 PHP 5.6 中已经废弃, 但是在 PHP 7.0 中, 会导致被调用方法中未定义 $this 变量,以及此行为已经废弃的警告。
PHP5输出: 8、在数值溢出的时候,内部函数将会失败将浮点数转换为整数的时候,如果浮点数值太大,导致无法以整数表达的情况下, 在之前的版本中,内部函数会直接将整数截断,并不会引发错误。 在 PHP 7.0 中,如果发生这种情况,会引发 E_WARNING 错误,并且返回 NULL。 9、JSON 扩展已经被 JSOND 取代JSON 扩展已经被 JSOND 扩展取代。 10、INI 文件中 # 注释格式被移除在配置文件INI文件中,不再支持以 # 开始的注释行, 请使用 ;(分号)来表示注释。 此变更适用于 php.ini 以及用 parse_ini_file() 和 parse_ini_string() 函数来处理的文件。 11、$HTTP_RAW_POST_DATA 被移除不再提供 $HTTP_RAW_POST_DATA 变量。 请使用 php://input 作为替代。 12、yield 变更为右联接运算符在使用 yield 关键字的时候,不再需要括号, 并且它变更为右联接操作符,其运算符优先级介于 print 和 => 之间。 这可能导致现有代码的行为发生改变。可以通过使用括号来消除歧义。
|
2022-08-19
2022-07-30
2022-08-17
2022-11-06
2022-08-17
请发表评论