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如何利用P3P实现跨域
Aug 24 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
Mar 02 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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
将CMYK颜色值和RGB颜色相互转换的PHP代码
2014/07/28 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
浅谈js原生拖放
2016/11/21 Javascript
移动开发之自适应手机屏幕宽度
2016/11/23 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
vue 路由缓存 路由嵌套 路由守卫 监听物理返回操作
2020/08/06 Javascript
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
纯CSS3实现漂亮的input输入框动画样式库(Text input love)
2018/12/29 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
污水厂厂长岗位职责
2014/01/04 职场文书
投资意向书范本
2014/04/01 职场文书
促销活动计划书
2014/05/02 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
建筑节能汇报材料
2014/08/22 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
学生逃课万能检讨书2000字
2015/02/17 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
党组织结对共建协议书
2016/03/23 职场文书
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript