php5.3/5.4/5.5/5.6/7常见新增特性汇总整理


Posted in PHP onFebruary 27, 2020

本文实例总结了php5.3/5.4/5.5/5.6/7新增特性。分享给大家供大家参考,具体如下:

php新增的特性,只是略微整理,并不完全。

一、php5.3添加的新特性

1、?:简化的三元运算符

<?php
$cur = $cur ? $cur : 1;
$cur = $cur ?: 1;

2、匿名函数

<?php
$test = function() {
  echo 'test';
};
$test();

$arr = array(1, 2, 3, 4, 5);
$arr = array_map(function($n) {
  return $n * 2;
}, $arr);
print_r($arr);

3、命名空间

<?php
namespace Test;

class Person {
  public function say() {
    echo 'hello';
  }
}
$p = new \Test\Person();
$p->say();

4、支持延迟静态绑定

<?php
class A {
  public static function who() {
    echo __CLASS__;
  }
  public static function test() {
    //self::who();
    //static来引用当前的类,这里调用的是B类的静态方法who
    static::who();
  }
}
class B extends A {
  public static function who() {
    echo __CLASS__;
  }
}
//B类调用继承于A的静态方法test,但该方法中self已经绑定了A类,所以调用的是父类的who方法。
//而新增的static则引用当前类,调用的则是本类的who方法。
B::test();

5、支持goto语句

<?php
for($i = 0; $i < 100; ++$i) {
  if($i == 50) {
    goto end;
  }
}
end : echo $i;

6、新增两个魔术方法__callStatic()和__invoke()

<?php
class A {
  public static function __callStatic($name, $arguments) {
    echo '你调用了不存在的静态方法:', $name;
  }
  public function __invoke($i) {
    echo '你把对象当函数调用了,还传了个值:', $i;
  }
}
A::xxx();
$a = new A();
$a(6);

7、新增nowdoc语法

<?php
$name = 'test';

//nowdoc使用单引号,内容不做变量解析
$a = <<< 'TEST'
测试$name
TEST;

//heredoc不加引号或加双引号,内容做变量解析
$b = <<< TEST
测试$name
TEST;

echo $a;
echo $b;

8、类外也可用const定义常量

<?php
const PI = 3.14;

9、http状态码在200-399范围内均被认为访问成功。

10、支持动态调用静态方法

<?php
class A {
  public static function test() {
    echo 'test';
  }
}
$cName = 'A';
$mName = 'test';
$cName::$mName();

二、php5.4添加的特性

1、内置一个简单的Web服务器

2、数组的简化写法

<?php
$arr = array(1, 2, 3);
$arr = array('a' => 1, 'b' => 2);

$arr = [1, 2, 3];
$arr = ['a' => 1, 'b' => 2];

3、新增支持对函数返回数组的成员访问解析

<?php
function getArr() {
  return array(1, 2, 3, 4, 5);
}
echo getArr()[2];

4、新增实例化时访问类成员

<?php
class A {
  public function test() {
    echo 'test';
  }
}
(new A())->test();

5、新增对短标签的支持,无论是否设置short_open_tag。

6、session提供上传进度支持,$_SESSION['upload_progress_name']。

7、新增加了$_SERVER['REQUEST_TIME_FLOAT'],用来统计服务请求时间。

8、默认使用mysqlnd,mysqli,pdo默认使用mysqlnd本地库。

9、让json更懂中文

<?php
$arr = array(
  'name' => '哈哈',
  'age' => 25,
);
echo json_encode($arr, JSON_UNESCAPED_UNICODE);

10、新增二进制直接量

<?php
$bin = 0b101;
echo $bin;

11、默认default_charset从ISO-8859-1已经变为UTF-8

12、新增Traits

<?php
trait A {
  public function fly() {
    echo '会飞';
  }
}
trait B {
  public function swim() {
    echo '游泳';
  }
}
class People {
  use A, B;
}
(new People())->fly();

三、php5.5新增的特性

1、empty支持传入一个任意表达式,不仅是一个变量

<?php
var_dump(empty(3 * 3));

function test() {
  return false;
}
var_dump(empty(test()));

2、新增密码哈希API,password_hash

3、新增生成器

<?php
$arr = function() {
  for($i = 0; $i < 10; ++$i) {
    //变量$i的值在不同的yield之间是保持传递的
    yield $i;
  }
};
$data = $arr();
foreach($data as $v) {
  echo $v;
}

4、新增finally关键字

<?php
try {
  throw new Exception('我是异常');
} catch(Exception $e) {
  echo $e->getMessage();
} finally {
  echo 'finally';
}

5、新增boolval()函数

6、新增array_column()函数

<?php
$arr = array(
  array('name' => 'test1', 'age' => 22),
  array('name' => 'test2', 'age' => 23),
  array('name' => 'test3', 'age' => 24),
);
//取出name列
print_r(array_column($arr, 'name'));
//取出name列,并用age作键
print_r(array_column($arr, 'name', 'age'));

7、foreach支持list()

<?php
$arr = [
  [3, 3],
  [4, 4],
  [5, 5],
];
foreach($arr as list($a, $b)) {
  echo $a, '-', $b, '<br>';
}

8、增加了opcache扩展

四、php5.6新增的特性

1、可以使用表达式定义常量

<?php
const ONE = 1 * 1;
class A {
  const TWO = 1 * 2;
  const THREE = self::TWO + 1;
  
  public function test($i = self::THREE + ONE) {
    echo $i;
  }
}
(new A())->test();

2、使用...定义变长函数参数

<?php
function total(...$nums) {
  $total = 0;
  foreach($nums as $num) {
    $total += $num;
  }
  return $total;
}
echo total(1, 2, 3, 4, 5);
$arr = [3, 4, 5, 6];
echo total(...$arr);

3、使用**进行幂运算

<?php
echo 2 ** 4;
$a = 2;
$a **= 4;
echo $a;

4、use function和use const

<?php
namespace A {
  const PI = 3.14;
  function test() {
    echo 'test';
  }
}
namespace B {
  use function \A\test;
  use const \A\PI;
  
  echo PI;
  test();
}

5、加入hash_equals()函数,以恒定的时间消耗来进行字符串比较,以避免时序攻击。

6、加入__debugInfo()
当使用var_dump()输出对象的时候,可以用来控制要输出的属性和值。

<?php
class A {
  protected $a = 1;
  protected $b = 2;
  protected $c = 3;
  public function __debugInfo() {
    //返回值必须是数组
    return array(
      'a' => $this->a,
    );
  }
}
var_dump((new A()));

五、php7新增的特性

1、??运算符(NULL合并运算符)

<?php
$page = $_GET['page'] ?? 1;

2、标量类型声明
3、函数返回值类型声明

<?php
declare(strict_types=1);

function add(int $num1, int $num2) : int {
  return $num1 + $num2;
}
echo add(2, 3);
//在严格模式下,下面这行会报错
echo add(2.0, 3.0);

4、匿名类

<?php
(new class {
  public function test() {
    echo 'test';
  }
})->test();

5、通过define()定义常量数组

<?php
define('ARR', ['a', 'b', 'c']);
echo ARR[2];

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php中截取字符串支持utf-8
Jan 18 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
PHP  Yii清理缓存的实现方法
Nov 10 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
Jun 12 PHP
PHP简单实现记录网站访问量功能示例
Jun 06 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 #PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 #PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 #PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 #PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 #PHP
php使用gearman进行任务分发操作实例详解
Feb 26 #PHP
php实现根据身份证获取精准年龄
Feb 26 #PHP
You might like
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
python算法学习之计数排序实例
2013/12/18 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python中is和==的区别详解
2018/11/15 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
python可视化text()函数使用详解
2020/02/11 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
暑期社会实践学生的自我评价
2014/01/09 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
总经理工作职责范文
2014/03/14 职场文书
2014年度个人总结范文
2015/03/09 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
MySQL主从切换的超详细步骤
2022/06/28 MySQL
Golang Web 框架Iris安装部署
2022/08/14 Python