当前位置: 首页 > news >正文

PHP7中我们应该学习会用的新特性

PHP7于2015年11月正式发布,本次更新可谓是PHP的重要里程碑,它将带来显著的性能改进和新特性,并对之前版本的一些特性进行改进。本文小编将和大家一起来了解探讨PHP7中的新特性。

1. 标量类型声明

我们知道PHP是一种弱类型的编程语言,因此没有提供任何方法来指定输入参数和返回值的类型,PHP7突破了这种现状,增加了对标量类型(int,float,string,bool)的声明支持,增加declare(strict_types=1)指令声明是否严格类型校验,我们来看一段代码:

(strict_types=) {
     $x + $y;
}  add(, );

有效的类型有:class/interface name, self, array, callable, bool, float, int and string.

2. ?? ——NULL 合并运算符

PHP7中添加了NULL合并运算符,不要小看这个“??”,有了它我们就能很方便的获取一个参数,并能在其为空的情况下提供一个默认值。如何??运算符左侧值存在并且不为NULL,则返回左侧,否则将返回其右侧值。我们还是通过下面一段代码来体验一下??运算符的强大吧。

<?php 
// 获取user参数的值(如果为空,则用'nobody') 
// PHP5中我们这样来实现: 
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody'; 
// PHP7中,使用??运算符更便捷: 
$username = $_GET['user'] ?? 'nobody'; 
?>

3. 匿名类

匿名类顾名思义没有类名称,其声明和实例化是同时的,PHP7 支持通过 new class 来实例化一个匿名类,可以用来替代一些”用后即焚”的完整类定义。

echo ( {
     {
       ;
    }
})->myMethod();

4. 更多 Error 错误可以进行异常处理

PHP7中更多的Error变为可捕获的Exception返回给开发者,如果不进行捕获则为Error,如果捕获就变为一个可在程序内处理的Exception。默认情况下,Error会直接导致程序中断,而PHP7则通过try / catch程序块捕获并且处理,让程序继续执行下去,为程序员提供更灵活的选择。

代码示例:

nonExistFunction($arg);

这时上面的代码会提示错误“Fatal error: Call to a member function method() on a non-object ”,并且这个致命错误会停止后面代码的继续执行。

所以如果你想继续执行代码,可以通过异常处理的方式解决:

{
    nonExistFunction($arg);  }  (EngineException $e ) {
     ;
}

5. 结合比较运算符(<=> )

这个不多解释,我们直接看示例代码,通过代码你可以很容易了解该运算符的作用。

{
    ($a < $b) ?  : (($a > $b) ?  : )
}  {
    $a <=> $b;
}

6. 定义数组常量

过去我们在用define()定义常量时,数据类型只支持标量,但在PHP7中,支持定义数组类型的常量。

define('MYCONSTANT', array('a','b','c'))

PHP7新增的特性还有很多,今天我们先介绍到这,后续会持续更新,同时也欢迎广大PHPer补充,我们共同交流,共同学习,共同进步。


本文作者:佚名

来源:51CTO

相关文章:

  • 用户认证--------------auth模块
  • 贪吃蛇小游戏-----C语言实现
  • php+xml有什么用
  • SpringBoot(六)-- 静态资源处理
  • django开发-定时任务的使用
  • VB6实现真正的继承【转】
  • WPF 窗口
  • 三菱数控CNC系统G代码M代码大全
  • Java 注释
  • ansible debug模块学习笔记
  • idea常用快捷键
  • MySql 用户管理 中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束):...
  • 迎双11十周年,OceanBase 2.0挑战新巅峰
  • PHP 字符串
  • 文本监控 :oninput onchange onpropertychange 的区别
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • exports和module.exports
  • Java深入 - 深入理解Java集合
  • Python进阶细节
  • Python语法速览与机器学习开发环境搭建
  • quasar-framework cnodejs社区
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • webpack4 一点通
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 记一次用 NodeJs 实现模拟登录的思路
  • 入门到放弃node系列之Hello Word篇
  • 算法---两个栈实现一个队列
  • 详解NodeJs流之一
  • 新手搭建网站的主要流程
  • 追踪解析 FutureTask 源码
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​学习一下,什么是预包装食品?​
  • # Panda3d 碰撞检测系统介绍
  • # 安徽锐锋科技IDMS系统简介
  • #stm32驱动外设模块总结w5500模块
  • (1)Android开发优化---------UI优化
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)fread与fwrite详解
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (数据结构)顺序表的定义
  • (算法)前K大的和
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net 4.0发布后不能正常显示图片问题
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .net 微服务 服务保护 自动重试 Polly
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net分布式压力测试工具(Beetle.DT)