PHP 5.2、5.3、5.4、5.5、5.6 各版本新功能详解

本文概述了PHP从5.2到5.6版本的主要更新,包括新特性如命名空间、闭包、Traits、生成器,以及语法糖如数组简写、短标签支持。详细介绍了各版本的亮点,如PDO和MySQLi的引入、匿名函数、命名空间的引入、数组语法的简化、内置Web服务器的加入等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结

PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束
PHP5.2:JSON 支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定,Heredoc 和 Nowdoc, const, 三元运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6: 常量增强,可变函数参数,命名空间增强

php5.2以前(2006前)

  1. autoload的使用;当在代码中使用一个未定义的类的时候,该函数就会被调用
    现在已经不再使用了,因为一个项目中只能有一个__autoload();现在使用spl_autoload_register();
  2. PDO和MiSQLi的使用
  3. 类型约束。
    通过类型约束可以限制参数的类型,不过这个机制不完善。

php5.2(2006-2011)

(2006-2011)
JSON的支持
       增加了json_encode(),json_decode()等函数

php5.3(2009-2012)

PHP5.3 算是一个非常大的更新,新增了大量新特征,同时也做了一些不向下兼容的修改

1.弃用的功能
以下几个功能被弃用,若在配置文件中启用,则 PHP 会在运行时发出警告。
Register Globals
Magic Quotes
Safe Mode

2.匿名函数
f u n c = f u n c t i o n ( func=function( func=function(arg){
echo $arg;
}
$func(‘hello’);

3.新增了魔术方法 __invoke(),__callStatic();

随着匿名函数的加入,PHP 引入了一个新的魔术方法 __invoke().
该魔术方法会在将一个对象作为函数调用时被调用:
class A
{
    public function __invoke($str)
    {
        print "A::__invoke(): {$str}";
    }
}

$a = new A;
$a("Hello World");
输出毫无疑问是:  A::__invoke(): Hello World

__callStatic() 则会在调用一个不存在的静态方法时被调用。

4.命名空间,但不完善,只支持类

5.后期静态绑定

6.Heredoc 和 Nowdoc
对 Heredoc 以及 Nowdoc 进行了一些改进,它们都用于在 PHP 代码中嵌入大段字符串。

7.用 const 定义常量
PHP5.3 起同时支持在全局命名空间和类中使用 const 定义常量。

旧式风格:
define("XOOO", "Value");
新式风格:

const XXOO = "Value";
const 形式仅适用于常量,不适用于运行时才能求值的表达式:
// 正确
const XXOO = 1234;
// 错误
const XXOO = 2 * 617;
(5.6版后可以了)

8.三元运算符简写形式
旧式风格:
echo $a ? $a : “No Value”;
可简写成:
echo $a ?: “No Value”;
即如果省略三元运算符的第二个部分,会默认用第一个部分代替。

9.Phar
Phar即PHP Archive, 起初只是Pear中的一个库而已,后来在PHP5.3被重新编写成C扩展并内置到 PHP 中。
Phar用来将多个 .php 脚本打包(也可以打包其他文件)成一个 .phar 的压缩文件(通常是ZIP格式)。
目的在于模仿 Java 的 .jar, 不对,目的是为了让发布PHP应用程序更加方便。同时还提供了数字签名验证等功能。
.phar 文件可以像 .php 文件一样,被PHP引擎解释执行,同时你还可以写出这样的代码来包含(require) .phar 中的代码:
require(“xxoo.phar”);
require(“phar://xxoo.phar/xo/ox.php”);
注:http://www.php.net/manual/zh/phar.using.intro.php

PHP5.4(2012-2013)

1.Short Open Tag
在 PHP5.3 起被默认开启,在 PHP5.4 起总是可用。
使用这种简写形式在 HTML 中嵌入 PHP 变量将会非常方便。
对于纯 PHP 文件(如类实现文件), PHP 官方建议顶格写起始标记,同时 省略 结束标记。
这样可以确保整个 PHP 文件都是 PHP 代码,没有任何输出,否则当你包含该文件后,设置 Header 和 Cookie 时会遇到一些麻烦!
注:Header 和 Cookie 必须在输出任何内容之前被发送。

2.数组简写形式

这是非常方便的一项特征!
// 原来的数组写法
$arr = array("key" => "value", "key2" => "value2");
// 简写形式
$arr = ["key" => "value", "key2" => "value2"];

3.Traits
所谓Traits就是“构件”,是用来替代继承的一种机制。PHP中无法进行多重继承,但一个类可以包含多个Traits.

// Traits不能被单独实例化,只能被类所包含
trait SayWorld
{
    public function sayHello()
    {
        echo 'World!';
    }
}

class MyHelloWorld
{
    // 将SayWorld中的成员包含进来
    use SayWorld;
}

$xxoo = new MyHelloWorld();
// sayHello() 函数是来自 SayWorld 构件的
$xxoo->sayHello();

Traits还有很多神奇的功能,比如包含多个Traits, 解决冲突,修改访问
权限,为函数设置别名等等。
Traits中也同样可以包含Traits. 篇幅有限不能逐个举例,详情参见官网.
http://www.php.net/manual/zh/language.oop5.traits.php

4.内置 Web 服务器

PHP5.4开始内置一个轻量级的Web服务器,不支持并发,定位是用于开发和调试环境。

在开发环境使用它的确非常方便。

php -S localhost:8000
这样就在当前目录建立起了一个Web服务器,你可以通过 http://localhost:8000/ 来访问。
其中localhost是监听的ip,8000是监听的端口,可以自行修改。

很多应用中,都会进行URL重写,所以PHP提供了一个设置路由脚本的功能:

php -S localhost:8000 index.php
这样一来,所有的请求都会由index.php来处理。

你还可以使用 XDebug 来进行断点调试。

5.细节修改

PHP5.4 新增了动态访问静态方法的方式:
$func = "funcXXOO";
A::{$func}();

新增在实例化时访问类成员的特征:
(new MyClass)->xxoo();

新增支持对函数返回数组的成员访问解析(这种写法在之前版本是会报错的)print func()[0];

PHP5.5(2013起)

1.yield 生成器可以用于大文件处理

yield关键字用于当函数需要返回一个迭代器的时候, 逐个返回值。
function number10()
{
    for($i = 1; $i <= 10; $i += 1)
        yield $i;
}
该函数的返回值是一个数组:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

2.list() 用于 foreach

$array = [
    [1, 2, 3],
    [4, 5, 6],
];
foreach ($array as list($a, $b, $c))
    echo "{$a} {$b} {$c}\n";

3.细节修改
不推荐使用 mysql 函数,推荐使用 PDO 或 MySQLi。
不再支持Windows XP.
可用 MyClass::class 取到一个类的完整限定名(包括命名空间)。
empty() 支持表达式作为参数。
try-catch 结构新增 finally 块。

PHP5.6

1.常量增强

定义常量时允许使用之前定义的常量进行计算:
const A = 2;
const B = A + 1;

class C
{
    const STR = "hello";
    const STR2 = self::STR + ", world";
}

允许常量作为函数参数默认值:
function func($arg = C::STR2)

2.可变函数参数

用于代替 func_get_args()

function add(...$args)
{
    $result = 0;
    foreach($args as $arg)
        $result += $arg;
    return $result;
}

同时可以在调用函数时,把数组展开为函数参数:
$arr = [2, 3];
add(1, ...$arr);
// 结果为 6

3.命名空间增强

命名空间支持常量和函数:

namespace Name\Space {
    const FOO = 42;
    function f() { echo __FUNCTION__."\n"; }
}

namespace {
    use const Name\Space\FOO;
    use function Name\Space\f;

    echo FOO."\n";
    f();
}

还有一些没列出来,可参考:
https://blog.youkuaiyun.com/lamp_yang_3533/article/details/529407870

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值