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 相关文章推荐
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
php 301转向实现代码
Sep 18 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
PHP系统命令函数使用分析
Jul 05 PHP
php中cookie的使用方法
Mar 29 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
php类常量用法实例分析
Jul 09 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 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 不使用js实现页面跳转
2014/02/11 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
js 调整select 位置的函数
2008/02/21 Javascript
在html页面中包含共享页面的方法
2008/10/24 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
详解Vue.js搭建路由报错 router.map is not a function
2017/06/27 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
python docx 中文字体设置的操作方法
2018/05/08 Python
使用Python进行目录的对比方法
2018/11/01 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
教师节商场活动方案
2014/02/13 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
本科生就业推荐信
2014/05/19 职场文书
学校志愿者活动总结
2014/06/27 职场文书
竞选班长演讲稿400字
2014/08/22 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
经典导游欢迎词
2015/01/26 职场文书
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
2022/04/04 Python
浅析Python OpenCV三种滤镜效果
2022/04/11 Python