PHP7新特性简述


Posted in Javascript onJune 11, 2017

类型声明

看代码,一目了然了。

class person
{
  public function age(int $age) : string
  {
    return 'Age is ' . $age;
  }
}

命名空间与use关键字批量声明

非混合模式

use Publishers\Packt\{ Book, Ebook, Video};
use function Publishers\Packt\{ getBook, saveBook };
use const Publishers\Packt\{ COUNT, KEY };

混合模式

use Publishers\Packt\{
  Book,
  Ebook,
  Video,
  function getBook,
  function saveBook,
  const COUNT,
  const KEY
};

复合模式

use Publishers\Packt\{
  Paper\Book,
  Electronic\Ebook,
  Media\Video
};

匿名类

匿名类的声明与使用时同时进行的,具备其他类所具备的所以功能,区别在于匿名类没有类名。语法如下:

new class(argument) { definition };

匿名类是没有类名的,但在PHP内部,会在内存的引用地址表中为其分配一个全局唯一的名称。

$name = new class('You') {
  public function __construct($name)
  {
    echo $name;
  }
};

匿名类可以继承父类及父类的方法。

class Packt
{
  protected $number;
  public function __construct()
  {
    echo 'parent construct';
  }
  public function getNumber() : float
  {
    return $this->number;
  }
}
$number = new class(5) extends Packt
{
  public function __construct(float $number)
  {
    parent::__construct();
    $this->number = $number;
  }
};
echo $number->getNumber();

匿名类可以继承接口。

interface Publishers
{
  public function __construct(string name, string address);
  public function getName();
  public function getAddress();
}
class packt
{
  protected $number;
  protected $name;
  protected $address;
  public function ...
}
$info = new class('name', 'address') extends Packt implement Publishers
{
  public function __construct(string $name, string $address)
  {
    $this->name = $name;
    $this->address = $address;
  }
  public function getName() : string
  {
    return $this->name;
  }
  public function getAddress() : string
  {
    return $this->address;
  }
}
echo $info->getName() . ' ' . $info->getAddress();

匿名类可以嵌套在一个类中使用。

class Math
{
  public $first_number = 10;
  public $second_number = 10;
  public function add() : float
  {
    return $this->first_number + $this->second_number;
  }
  public function mutiply_sum()
  {
    return new class() extends Math
    {
      public function mutiply(float $third_number) : float
      {
        return $this->add() * $third_number;
      }
    };
  }
}
$math = new Math();
echo $math->mutiply_sum()->mutiply(2);

摒弃老式构造函数

从PHP4开始,构造函数可以通过命名与类名一致的方式来声明自己是构造函数,在PHP7中这种方式声明构造函数依然可以使用,但不推荐使用,会输出不推荐的信息 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Packt has a deprecated constructor in ...,PHP7中推荐使用 __construct()。

throwable接口

从PHP7开始,程序中的fatal错误都可以被截获,PHP7提供了throwable接口,异常与错误都继承于这个接口。

Error

现在大多数的fatal错误情况会抛出一个error实例,类似于截获异常,error实例可以被try/catch截获。

try
{
  ...
} catch(Error $e)
{
  echo $e->getMessage();
}

一些错误情况只有error的子实例会被抛出,例如 TypeError、DivisionByZeroError、ParseError等。

<=>操作符

<=>操作符将==、<、>三个比较操作符打包在了一起,具体使用规则如下。

操作符两边相等时返回 0

操作符左边小于右边时返回 -1

操作符左边大于右边时返回 1

null合并运算符

?? 合并运算符,在第一操作数存在时可被直接返回,否则返回第二操作数。

$title = $post['title'] ?? NULL;
$title = $post['title'] ?? $get['title'] ?? 'No title';

uniform变量语法

$first = ['name' => 'second'];
$second = 'two';
echo $$first['name'];
echo ${Sfirst['name']}; // PHP7
...
echo $object->$methods['title'];
echo $object->{$methods['title']}; // PHP7

主要是因为PHP7与之前版本PHP的解析方式不一样,在PHP7中加上花括号就可以啦,就像上边代码这样,否则会报错。

常量数组

从PHP5.6开始常量数组可以用const关键字来声明,在PHP7中常量数组可以通过define函数来初始化。

const STORES = ['en', 'fr', 'ar']; // php5.6
define('STORES', ['en', 'fr', 'ar']); // php7

switch中的default默认值

在PHP7之前,switch语句中允许多个default默认值,从PHP7开始,只能有一个default默认值,否则会产生fatal级别错误。

// php7之前
switch (true) {
  case 'value':
    # code...
    break;
  default:
    # code...
    break;
  default:
    # code...
    break;
}
// php7
switch (true) {
  case 'value':
    # code...
    break;
  default:
    # code...
    break;
}

session_start函数中的选项数组

在PHP7之前,使用session的时候都必须先调用session_start()函数,且这个函数并没有参数需要传递,所有session相关的配置都在php.ini文件中,从PHP7开始,可以在调用这个函数时传递参数选项数组,这些设置信息将覆盖php.ini中的session配置。

session_start([
  'cookie_lifetime' => 3600,
  'read_and_close' => true
]);

unserialize函数引入过滤器

unserialize()可以反序列化任何类型的对象,没有任何过滤项,不安全,PHP7在unserialize()中引入了过滤器,且默认允许反序列化所有类型的对象。

$result = unserialize($object, ['allowed_classes' => ['Book', 'Ebook']]);

以上所述是小编给大家介绍的PHP7新特性简述,希望对大家有所帮助!

Javascript 相关文章推荐
html+css+js实现xp window界面及有关功能
Mar 26 Javascript
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
Feb 28 Javascript
详解jQuery中的元素的属性和相关操作
Aug 14 Javascript
使用jQuery处理AJAX请求的基础学习教程
May 10 Javascript
JavaScript仿flash遮罩动画效果
Jun 15 Javascript
AngularJS优雅的自定义指令
Jul 01 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
Jan 24 Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 Javascript
微信小程序中转义字符的处理方法
Mar 28 Javascript
JS co 函数库的含义和用法实例总结
Apr 08 Javascript
jquery与js实现全选功能的区别
Jun 11 #jQuery
jQuery 表单序列化实例代码
Jun 11 #jQuery
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
Jun 11 #jQuery
基于angular实现模拟微信小程序swiper组件
Jun 11 #Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 #Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 #Javascript
jQuery复合事件结合toggle()方法的用法示例
Jun 10 #jQuery
You might like
如何写php程序?
2006/12/08 PHP
PHP mkdir()定义和用法
2009/01/14 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
php实现网站留言板功能
2015/11/04 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
2016/04/27 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
jQuery读取和设定KindEditor值的方法
2013/11/22 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
基于JavaScript实现简单的轮播图
2021/03/03 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python生成不重复随机值的方法
2015/05/11 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python输出决策树图形的例子
2019/08/09 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
销售总监岗位职责
2014/01/04 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
微信小程序基础教程之echart的使用
2021/06/01 Javascript
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang