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与ASP
Oct 09 PHP
PHP中__get()和__set()的用法实例详解
Jun 04 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
destoon二次开发入门示例
Jun 20 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
php 类自动载入的方法
Jun 03 PHP
PHP Cookei记录用户历史浏览信息的代码
Feb 03 PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 PHP
PHP http请求超时问题解决方案
Nov 13 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
第七节 类的静态成员 [7]
2006/10/09 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
老生常谈 js中this的指向
2016/06/30 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
基于jquery.page.js实现分页效果
2018/01/01 jQuery
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python实现五子棋小游戏
2020/03/25 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
机械设计职业生涯规划书
2013/12/27 职场文书
村委会主任先进事迹
2014/01/15 职场文书
合作经营协议书范本
2014/04/17 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
第二批党的群众路线教育实践活动总结报告
2014/10/30 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python
react antd实现动态增减表单
2021/06/03 Javascript