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程序中的常见漏洞进行攻击(上)
Oct 09 PHP
PHP 简单日历实现代码
Oct 28 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
基于php实现的验证码小程序
Dec 13 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 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项目的方法
2006/10/09 PHP
浅析51个PHP处理字符串的函数
2013/08/02 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
2019/04/16 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
Vue.js结合Ueditor富文本编辑器的实例代码
2017/07/11 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
vue组件三大核心概念图文详解
2019/05/30 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
Python实现字符串中某个字母的替代功能
2019/10/21 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
技术总监的工作职责
2013/11/13 职场文书
消防应急演练方案
2014/02/12 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
自荐信模板大全
2015/03/27 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
怎样写观后感
2015/06/19 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
js 实现验证码输入框示例详解
2022/09/23 Javascript