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 相关文章推荐
浅谈JavaScript数据类型
Mar 03 Javascript
在线所见即所得HTML编辑器的实现原理浅析
Apr 25 Javascript
简介JavaScript中Boolean.toSource()方法的使用
Jun 05 Javascript
常用的JQuery函数及功能小结
Mar 24 Javascript
JavaScript:Date类型全面解析
May 19 Javascript
input 禁止输入特殊字符的四种实现方式
Aug 24 Javascript
AngularJS之自定义服务详解(factory、service、provider)
Apr 14 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
Oct 25 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
vue组件编写之todolist组件实例详解
Jan 22 Javascript
jQuery实现的简单图片轮播效果完整示例
Feb 08 jQuery
JavaScript 如何在浏览器中使用摄像头
Dec 02 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
建立文件交换功能的脚本(三)
2006/10/09 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
jQuery操作select的实例代码
2012/06/14 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
JavaScript实现点击文字切换登录窗口的方法
2015/05/11 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
2016/07/11 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
python中from module import * 的一个坑
2014/07/20 Python
python基于socket实现网络广播的方法
2015/04/29 Python
简单讲解Python中的闭包
2015/08/11 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
python3实现基于用户的协同过滤
2018/05/31 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python线程threading模块用法详解
2020/02/26 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
编程输出如下图形
2013/11/24 面试题
畜牧兽医本科生的自我评价
2014/03/03 职场文书
岗位聘任书范文
2014/03/29 职场文书
防沙治沙典型材料
2014/05/07 职场文书
教师个人考察材料
2014/12/16 职场文书
网络管理员岗位职责
2015/02/12 职场文书
个人党性分析总结
2015/03/05 职场文书