PHP7新特性

PHP 7 新特性 PHP 7将大多数错误转换为异常,这使得错误处理更加一致和可预测。开发者可以更方便地捕获和处理错误。try {// 可能会导致错误的代码// 错误处理。 阅读详情

PHP 7使用新的Zend Engine 3.0将应用程序性能提高近两倍,内存消耗比PHP 5.6高出50%。它允许服务更多的并发用户,而不需要任何额外的硬件。PHP 7是考虑到今天的工作负载而设计和重构的。

PHP新功能总结

  • 改进的性能 - 将PHPNG代码合并到PHP7中,速度是PHP 5的两倍。

  • 降低内存消耗 - 优化的PHP 7使用较少的资源。

  • 标量类型声明 - 现在可以强制执行参数和返回类型。

  • 一致的64位支持 - 对64位体系结构机器的一致支持。

  • 改进了异常层次 - 异常层次得到了改进

  • 许多致命的错误转换为例外 - 例外范围增加,涵盖许多致命的错误转换为例外。

  • 安全随机数发生器 - 增加新的安全随机数发生器API。

  • 已弃用的SAPI和扩展已删除 - 各种旧的和不受支持的SAPI和扩展从最新版本中删除。

  • 空合并运算符(?) - 添加了新的空合并运算符。

  • 返回和标量类型声明 - 支持所添加的返回类型和参数类型。

  • 匿名类 - 支持匿名添加。

  • 零成本断言 - 支持零成本断言增加。

标量类型声明

在PHP 7中,引入了一个新的特性,即标量类型声明。标量类型声明有两个选项

  • 强制 - 强制是默认模式,不需要指定。

  • 严格 - 严格的模式已经明确暗示。

     

功能参数的以下类型可以使用上述模式强制执行

  • float

  • int

  • bool

  • string

  • interfaces

  • array

  • callable

强制模式
<?php
   // Coercive mode
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1)); //9
?>

 

严格模式
<?php
   // Strict mode
   declare(strict_types=1);
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1)); //Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...
?>

 

 

返回类型声明

有效的返回类型

<?php
   declare(strict_types = 1);
   function returnIntValue(int $value): int {
      return $value;
   }
   print(returnIntValue(5));
?>

 

无效返回类型

<?php
   declare(strict_types = 1);
   function returnIntValue(int $value): int {
      return $value + 1.0;
   }
   print(returnIntValue(5));//Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned.
?>

 

空合并运算符

在PHP 7中,引入了一个新的特性,即空合并运算符(??)。它用来替代与isset()函数结合的三元操作。该空如果它存在,而不是空合并运算符返回第一个操作数; 否则返回第二个操作数。

<?php
   // fetch the value of $_GET['user'] and returns 'not passed'
   // if username is not passed
   $username = $_GET['username'] ?? 'not passed';
   print($username);
   print("<br/>");

   // Equivalent code using ternary operator
   $username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
   print($username);
   print("<br/>");
   // Chaining ?? operation
   $username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
   print($username);

   // output
   //not passed
?>

 

飞船运算符

它用来比较两个表达式。当第一个表达式分别小于,等于或大于第二个表达式时,它返回-1,0或1。字符串比较ASCII

//integer comparison
   print( 1 <=> 1);print("<br/>");
   print( 1 <=> 2);print("<br/>");
   print( 2 <=> 1);print("<br/>");

// output
    0
    -1
    1

 

常量数组

使用define()函数定义数组常量。在PHP 5.6中,只能使用const关键字来定义它们。

<?php
//define a array using define function
   define('animals', [
      'dog',
      'cat',
      'bird'
   ]);
   print(animals[1]);
// output
    cat  
?>

 

匿名类

现在可以使用新类来定义匿名类。匿名类可以用来代替完整的类定义。

<?php
   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) {
         print($msg);
      }
   });

   $app->getLogger()->log("My first Log Message");
?>

//output

My first Log Message

 

Closure类

Closure :: call()方法被添加为一个简短的方式来临时绑定一个对象作用域到一个闭包并调用它。与PHP5的bindTo相比,它的性能要快得多。

在PHP 7之前

<?php
   class A {
      private $x = 1;
   }

   // Define a closure Pre PHP 7 code
   $getValue = function() {
      return $this->x;
   };

   // Bind a clousure
   $value = $getValue->bindTo(new A, 'A');

   print($value());
   //output
   1
?>

 

PHP 7+

<?php
   class A {
      private $x = 1;
   }

   // PHP 7+ code, Define
   $value = function() {
      return $this->x;
   };

   print($value->call(new A));
   //output
   1
?>

 

过滤unserialize

PHP 7引入了过滤的unserialize()函数,以便在对不可信数据上的对象进行反序列化时提供更好的安全性。它可以防止可能的代码注入,并使开发人员能够对可以反序列化的类进行白名单。

<?php
   class MyClass1 {
      public $obj1prop;   
   }
   class MyClass2 {
      public $obj2prop;
   }

   $obj1 = new MyClass1();
   $obj1->obj1prop = 1;
   $obj2 = new MyClass2();
   $obj2->obj2prop = 2;

   $serializedObj1 = serialize($obj1);
   $serializedObj2 = serialize($obj2);

   // default behaviour that accepts all classes
   // second argument can be ommited.
   // if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
   $data = unserialize($serializedObj1 , ["allowed_classes" => true]);

   // converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2
   $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);

   print($data->obj1prop);
   print("<br/>");
   print($data2->obj2prop);

   //output
   1
   2
?>

 

IntlChar

在PHP7中,增加了一个新的IntlChar类,它试图揭示额外的ICU功能。这个类定义了一些静态方法和常量,可以用来处理Unicode字符。在使用这个课程之前,你需要安装Intl扩展。

<?php
   printf('%x', IntlChar::CODEPOINT_MAX);
   print (IntlChar::charName('@'));
   print(IntlChar::ispunct('!'));

   //output
   10ffff
   COMMERCIAL AT
   true
?>

 

CSPRNG

在PHP 7中,引入了两个新的函数来以跨平台的方式生成密码安全的整数和字符串。

  • random_bytes() - 生成密码安全的伪随机字节。

  • random_int() - 生成密码安全的伪随机整数。

<?php
   $bytes = random_bytes(5);
   print(bin2hex($bytes));

   //output
   54cc305593

  print(random_int(100, 999));
  print("");
  print(random_int(-1000, 0));

  //output
  614
  -882
?>

 

使用声明

从PHP7开始,可以使用单个use语句从相同的命名空间导入类,函数和常量,而不是使用多个use语句。

<?php
   // Before PHP 7
   use com\tutorialspoint\ClassA;
   use com\tutorialspoint\ClassB;
   use com\tutorialspoint\ClassC as C;

   use function com\tutorialspoint\fn_a;
   use function com\tutorialspoint\fn_b;
   use function com\tutorialspoint\fn_c;

   use const com\tutorialspoint\ConstA;
   use const com\tutorialspoint\ConstB;
   use const com\tutorialspoint\ConstC;

   // PHP 7+ code
   use com\tutorialspoint\{ClassA, ClassB, ClassC as C};
   use function com\tutorialspoint\{fn_a, fn_b, fn_c};
   use const com\tutorialspoint\{ConstA, ConstB, ConstC};

?>

 

整数部分

PHP 7引入了一个新的函数intdiv(),它对它的操作数进行整数除法,并将除法运算返回为int。

<?php
   $value = intdiv(10,3);
   var_dump($value);
   print(" ");
   print($value);

   //output
   int(3)
   3
?>

 

会话选项

session_start()函数接受来自PHP7 + 的一系列选项来覆盖php.ini中设置的会话配置指令。这些选项支持session.lazy_write,默认情况下,它会导致PHP在会话数据发生更改时覆盖任何会话文件。

添加的另一个选项是read_and_close,它表示应该读取会话数据,然后应该立即关闭会话。例如,将session.cache_limiter设置为private,并使用以下代码片段将标志设置为在读取完毕后立即关闭会话。

<?php
   session_start([
      'cache_limiter' => 'private',
      'read_and_close' => true,
   ]);
?>

 

弃用

PHP 4样式构造函数是与它们定义的类具有相同名称的方法,现在已被弃用,并且将来将被删除。如果PHP 4的构造函数是类中定义的唯一构造函数,则PHP 7将发出E_DEPRECATED。实现__construct()方法的类不受影响。

<?php
   class A {
      function A() {
         print('Style Constructor');
      }
   }
?>

 

对非静态方法的静态调用已被弃用,并可能在将来被删除

<?php
   class A {
      function b() {
         print('Non-static call');
      }
   }
   A::b();
   // Deprecated: Non-static method A::b() should not be called statically in...Non-static call
?>

 

password_hash()函数的salt选项已被弃用,所以开发人员不会生成自己的(通常是不安全的)盐。当开发人员不提供盐时,函数本身会生成密码安全的盐,因此不再需要定制盐的生成。
该capture_session_meta SSL上下文选项已被弃用。SSL元数据现在通过stream_get_meta_data()函数使用。

 

错误处理

从PHP 7开始,错误处理和报告已经改变。而不是通过PHP 5使用的传统错误报告机制来报告错误,现在大多数错误都是通过抛出错误异常来处理的。与异常类似,这些错误异常会一直冒泡,直到它们到达第一个匹配的catch块。如果没有匹配的块,则使用set_exception_handler()安装的默认异常处理程序将被调用。如果没有默认的异常处理程序,那么异常将被转换为致命错误,并将像传统的错误一样处理。

由于错误层次结构不是从Exception扩展的,所以使用catch(Exception $ e){...}块来处理PHP 5中未捕获的异常的代码将不会处理这样的错误。catch(Error $ e){...}块或set_exception_handler()处理程序是处理致命错误所必需的。

 

<?php
   class MathOperations {
      protected $n = 10;

      // Try to get the Division by Zero error object and display as Exception
      public function doOperation(): string {
         try {
            $value = $this->n % 0;
            return $value;
         } catch (DivisionByZeroError $e) {
            return $e->getMessage();
         }
      }
   }

   $mathOperationsObj = new MathOperations();
   print($mathOperationsObj->doOperation());

   // output
   Modulo by zero
?>

文章来源 :https://mp.weixin.qq.com/s/yeR_OMgf_xPsdzPyjKMRHQ

解决date(): Argument #2 ($timestamp) must be of type ?int, float given错误的方法 在PHP中,date()函数用于将Unix时间戳转换为日期和时间。然而,有时候我们可能会遇到一个错误消息:“date(): Argument #2 ($timestamp) must be of type?date()函数接受两个参数:第一个参数是格式化字符串,第二个参数是可选的时间戳。如果没有提供,当前时间将被使用。在这个例子中,我们尝试将一个字符串(‘2022-01-01’)作为时间戳传递给date()函数,这是不允许的。在这个例子中,我们尝试传递一个负数作为时间戳,这在大多数情况下都是无效的。 阅读详情

相关推荐

STM32F103C8T6的PC13-15引脚配置避坑指南:为什么你的IO口不工作?

本文详细解析了STM32F103C8T6的PC13-15引脚作为普通IO口不工作的原因及解决方案。这三个引脚默认关联侵入检测和低速外部时钟等特殊功能,需先禁用TAMPER和LSE,并开启AFIO时钟,才能正确配置为普通GPIO。文章提供了标准外设库和HAL库的配置步骤、常见问题排查方法及硬件设计注意事项。

weixin_29169899的博客 523

PHP7的新特性

如果左侧的值大于右侧的值,则返回 1。)是一个新的运算符,如果左侧的操作数为 null,那么它会返回右侧的操作数。总体来说,PHP7 的新特性改善了 PHP 的整体性能和语言特性,增强了代码的可读性、可维护性和安全性,使得 PHP 更加适用于大型应用程序的开发和部署。PHP7 允许将 define() 函数用于定义数组常量,这意味着可以定义一个不可改变的数组,从而提高代码的可读性和安全性。PHP7 支持标量类型声明,可以在函数或方法的参数中指定参数的类型,包括整型、浮点型、布尔型以及字符串。

zxjljl的博客 737

从网格划分到端口接地:一份给ADS新手的Momentum RF仿真避坑实操指南

本文为ADS新手提供Momentum RF仿真的实用指南,涵盖网格划分、端口接地、特殊结构处理等关键设置技巧。通过30-50 cells/λ原则、1/10波长限制等黄金法则,帮助用户平衡仿真精度与效率,避免常见错误,提升电磁仿真结果的准确性。

weixin_33692284的博客 506

全网最全的 php7 新特性

世界上最好的语言新特性它来了

国内某知名游戏公司小菜鸡工程师 1万+

STM32 HAL库定时器中断里读编码器速度准吗?聊聊MG310电机的测速与防溢出处理

本文探讨了STM32 HAL库在定时器中断中读取编码器速度的精度问题,特别针对MG310电机的测速与防溢出处理提供了解决方案。通过对比定时中断法和编码器模式的性能,揭示了硬件编码器接口在降低误差和CPU占用率方面的优势,并详细介绍了CubeMX配置技巧和防溢出处理的工程实践。

weixin_28720767的博客 401

顶级的FDE需要拥有哪些技能?

上一篇《》说明白了什么是FDE。这一篇回答下一个问题:要成为顶级 FDE,需要哪些具体的技能?要想弄清楚FDE应该有哪些能力,就得先搞清楚FDE要完成哪些工作。同时,有一点是我们要密切关注的:现在是大模型时代,所以我们不能脱离大模型讨论FDE的能力。我们可以把FDE在客户现场需要完成的工作分为四类:破冰与诊断、价值交付、项目与预期管理、沟通与影响。另有两项元能力贯穿始终。以下按工作类别逐一拆解,每项能力配 1 / 3 / 5 分标准,方便对照自评。文末有完整打分工具链接。

mydeman的学习日志 262

PHP7新特性总结

前言 本文是一篇讲座听后+后续研究的总结。 话说当年追时髦,php7一出就给电脑立马装上了,php5和php7共存,也是立马写了个超级耗时间的循环脚本测了一番,确实php7给力很多,然后也是注意了一些新增的特性与一些丢弃掉的用法。 由于php升级乃头等大事,公司近期才打算升级,所以之前一直只能私下欣赏php7带来的快感,负责升级的小伙伴搞了个分享,还挺全的,此处mark一下,当作笔记。 主...

sinat_34191046的博客 221

关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).

今天新建工程发现出现一个错误 —— …\Output\CG.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 但我觉得我的操作没有任何问题,而且配置和上一个文件比较是一模一样的。 于是我开始百度查询,然后发现了下面几个博客—— @weixin_44133391——STM32 编译错误 @dorlolok——iel5 编译报错 error: L6235E: More than one

纯粹,学术,热爱。 9404

php7新特性

一、前言   php7目前(截止2018-09-17),最新的稳定版本是7.2.10(http://php.net/downloads.php上可查看版本信息),目前还有不少项目是用5.6甚至更早的版本。相比于php5.x的版本,php7有不少新的改进,性能方面也是有不少提升。下面来详细讲下。 二、新特性 1、php7.0相比于php5.6的新特性 参考:http://p...

ajqy4635的博客 399

ur3手眼标定+realsenseL515

知乎 csdn

AI_future的博客 978

一文了解英伟达(NVIDIA)所有显卡芯片

英伟达(NVIDIA)的产品线庞杂繁复,从面向游戏玩家的GeForce RTX系列,到数据中心的H100、B200,再到Jetson、DRIVE等边缘智能平台,一般人很难以厘清其全貌。这篇文章将用通俗而专业的语言,一文打通英伟达显卡芯片体系,让你彻底读懂这个GPU帝国是如何运转的。

bjdx_001的博客 6370

PHP7新特性介绍

PHP7-New-Features 本文档只介绍PHP7相关的新特性以及功能修改等, 对PHP7的性能和源码结构不做分析. 目录 新增功能 常用的语法糖标量类型和返回类型声明错误处理机制修改ASTNative TLS字符串处理机制修改整型处理机制修改参数处理机制修改foreach修改list()修改变量处理机制修改其他语言层面的修改 弃用功能新增函数修改函数 其他修改参

老鹰之歌的学习笔记 8018

【01】总目录——软件设计师50讲通关地图|从零基础到工程师职称

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏的01篇总目录,系统梳理了50篇博文的完整架构与核心逻辑。专栏覆盖软考软件设计师(中级)全部考点,分为导学规划、基础知识、设计模式、下午题专项、算法实战、冲刺模拟、收官进阶七大模块,既兼顾上午题75道单选题的理论攻坚,也聚焦下午题案例分析的解题能力提升。每篇博文均包含考点精讲、真题解析、实战技巧与速记方法,配套可运行代码、解题模板及备考资源。无论你是零基础转行、在校学生还是在职程序员,都能通过这份学习地图明确进度、精准定位薄弱环节,高效搭建知识体系

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1281

php array_clunm,php7+新特性

php7已经发布有段时间了,查了下正式版本的发布时间是2015年底,至于具体的新特性,在这里总结一下。标量类型声明php7新增了4种类型,字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。举个例子:上述能正常输出结果5,如果改为如下,把参数3改成字符串就会报错PHP Fatal error: Uncaught TypeError: Argumen...

weixin_36435325的博客 424

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

PHP7.0~PHP7.1~PHP7.2~PHP7.3~PHP7.4新特性

大家都知道,php现在在不断地更新和壮大,每个版本都有一次性能的提升,接下来我将给大家讲解下PHP7.X的新的特性。我会按照每个版本的特性进行讲解。 PHP7.0新特性 PHP7.1新特性 PHP7.0新特性 如果浏览不顺畅请到原文章出处:https://www.sky8g.com/technology/3208/ 请注意可能会提示风险,这是优快云网站设置的问...

jimbooks的博客 8043

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

测试php7的一些新特性

这是本人测试php7的一些新特性,部分地方标注与php之前版本的不同,php7比之前的php版本效率几乎快了一倍,使用php7是个趋势。别的不多说,上代码,还是那样,你用我这个代码测试时,运行一个测试时注释掉其余的。 //标量类型() 强制类型声明 function register(int $fee){     var_dump($fee); } //register(6680);

youjiangtengwan1的博客 438

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

php7.0新特性foreach,PHP7新特性foreach 修改示例介绍

PHP7新特性foreach 修改示例介绍这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!PHP 开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。这篇文章主要介...

weixin_28993311的博客 402

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

php7新特性有:将PHPNG代码合并到PHP7中;降低内存消耗;标量类型声明,可以强制执行参数和返回类型;一致的64位支持;改进了异常层次;已弃用的SAPI和扩展被删除;添加了新的空合并运算符(?);支持匿名添加;支持零成本断言增加。PHP7新特性总结改进的性能 - 将PHPNG代码合并到PHP7中,速度是PHP 5的两倍。降低内存消耗 - 优化的PHP 7使用较少的资源。标量类型声明 - 现在...

weixin_32155269的博客 832

浅谈php7的重大新特性_PHP7.3新特性

PHP7.3新特性1 发布时间06 Dec 2018New Features - Manual​php.net2 更灵活的 Heredoc 和 Nowdoc 语法结束标记不再需要独立一行或紧跟分号了。同时结束标记也可以使用缩进,使用缩进时doc内容的每行都会跳过相应的缩进。$data = ["元素", <<<STR Doc Content The new line...

weixin_39519072的博客 255
上一篇: 前后端完全分离后前端如何启动静态服务保证开发人员的访问
下一篇: layui中的onevent 和event使用方法
迷途大灰狼
博客等级 码龄10年 230粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值