PHP各版本差异 5.2——7.0

来源:互联网 发布:批量条码生成软件 编辑:程序博客网 时间:2024/06/05 08:22

PHP各版本差异 5.2——7.0

PHP5.2之前**********

  1. autoload : 使用未加载的类时,会自动加载类文件 **
  2. PDO : 通用数据库操作接口 **
  3. MysqLi : mysql的增强版接口,(同时提供面向过程和面向对象) **
  4. 类型约束 : 通过类型约束可以限制参数的类型,不过这一机制并不完善,目前仅适用于类和 callable(可执行类型)以及array(数组), 不适用于 string 和 int

PHP5.2(2006-2011)**********

  1. json支持 : json_encode()/json_decode()等关于json的函数 **

PHP5.3(2009-2012)**********

  1. 匿名函数 : 创建无名函数,用于回掉函数等
    func=function(a){echo $a;}; **
  2. 魔术方法__invoke()、__callStatic() :
    __invoke()在将一个对象作为函数调用时被调用,
    __callStatic() 则会在调用一个不存在的静态方法时被调用。
  3. 命名空间 : **
  4. 后期静态绑定 : 类中static 关键字被赋予了一个新功能:后期静态绑定
  5. Heredoc和Nowdoc : 用于在PHP代码中嵌入大段多行的字符串
  6. const : 定义常量
    旧式使用define(‘xxx’,’value’),
    新式const xxx = ‘value’;
  7. 三元操作符简写 : 可省略三元操作第二部分,默认用第一部分代替。
    旧式 echo $a?$a:’no value’;
    新式 echo $a?:’no value’; **
  8. Phar : 用来将多个 .php 脚本打包(也可以打包其他文件)成一个 .phar 的压缩文件(通常是ZIP格式).phar
    文件可以像.php文件一样,被PHP引擎解释执行,同时你还可以写出这样的代码来包含(require) .phar 中的代码:
    代码如下:
    require(“xxoo.phar”);
    require(“phar://xxoo.phar/xo/ox.php”);

PHP5.4(2012-2013)**********

  1. Short Open Tag : PHP起止标签简写自PHP5.4 起总是可用
  2. 数组简写形式 :
    旧式:$arr = array(“key” => “value”, “key2” =>
    “value2”);

    新式简写:$arr = [“key” => “value”, “key2” => “value2”];

  3. Traits : 代替继承的一种机制,PHP不支持多重继承,但一个类可以包含多个Traits,Traits不能被单独实例化,只能被类所包含

    代码如下:trait SayWorld{    public function sayHello(){        echo 'World!';    }}class MyHelloWorld{    use SayWorld;// 将SayWorld中的成员包含进来}$xxoo = new MyHelloWorld();$xxoo->sayHello();// sayHello() 函数是来自 SayWorld 构件的 
  4. 内置 Web 服务器 : 代码如下:php -S localhost:8000

  5. 细节修改 :
    动态访问静态方法:func = "funcXXOO";A::{func}();
    实例化时访问类成员:(new MyClass)->xxoo();
    对函数返回数组的成员访问解析:print func()[0];

PHP5.5(2013起)*************

  1. 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 可以用 list() 在 foreach 中解析嵌套的数组:

                代码如下:            $array = [                [1, 2, 3],                [4, 5, 6],            ];            foreach ($array as list($a, $b, $c))                echo "{$a} {$b} {$c}\n";            结果:            1 2 3            4 5 6
  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();                }

php7.0************************性能压测结果,耗时从2.991下降到1.186,大幅度下降60%。而在WordPress项目中,PHP7对比PHP5.6,QPS提升2.77倍。

  1. 标量类型和返回类型声明 : 标量类型声明 有两种模式: 强制 (默认) 和 严格模式。 类型参数: 字符串(string), 整数(int), 浮点数 (float), 以及布尔值 (bool)

                        代码如下:                    function sumOfInts(int $a, int $b){                        return $a + $b;                    }                    加上返回类型声明                    function sumOfInts(int $a, int $b): int {                        return $a + $b;                    }                    开启严格模式:declare(strict_type=1);强制当前文件下的程序遵循严格的函数传参类型和返回类型,类型不匹配就会抛出错误。
  2. 三元表达式null合并 : 如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。

                        代码如下:                    旧式:$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';                    新式:$username = $_GET['user'] ?? 'nobody';   
  3. 太空船操作符(组合比较符) : 太空船操作符用于比较两个表达式。当ab时它分别返回-1、0或1。

                        代码如下:                    echo 1 <=> 1; // 0                    echo 1 <=> 2; // -1                    echo 2 <=> 1; // 1 
  4. use批量声明(加载?) : use 可以在一句话中声明多个类或函数const 了

                        代码如下:                    use some/namespace/{ClassA, ClassB, ClassC as C};                    use function some/namespace/{fn_a, fn_b, fn_c};                     use const some/namespace/{ConstA, ConstB, ConstC};                     但还是要写出每个类或函数或 const 的名称(并没有像 python 一样的 from some import * 的方法)。 
  5. define()定义常量数组 : Array 类型的常量现在可以通过 define() 来定义。在 PHP5.6 中仅能通过 const定义。

                        代码如下:                    define('ANIMALS', [                        'dog',                        'cat',                        'bird'                    ])                    echo ANIMALS[1]; //结果: "cat" 
  6. 匿名类 : 现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义。

                        代码如下:                    interface Logger {                        public function log(string $msg);                    }                       $app =  new class implements Logger {                                    public function log(string $msg) {                                        echo $msg;                                    }                                } 
  7. 闭包 Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。

                        代码如下:                    class A {private $x = 1;}                    // PHP 7 之前版本的代码                    $getXCB = function() {return $this->x;};                    $getX = $getXCB->bindTo(new A, 'A'); // 中间层闭包                    echo $getX();                    // PHP 7+ 及更高版本的代码                    $getX = function() {return $this->x;};                    echo $getX->call(new A);                    以上例程会输出:                    1                    1 
  8. 生成器可以返回表达式 : 此特性基于 PHP 5.5 版本中引入的生成器特性构建的。 它允许在生成器函数中通过使用 return语法来返回一个表达式 (但是不允许返回引用值),可以通过调用 Generator::getReturn() 方法来获取生成器的返回值,但是这个方法只能在生成器完成产生工作以后调用一次。

                        代码如下:                    $gen = (function() {                        yield 1;                        yield 2;                        return 3;                    })();                    foreach ($gen as $val) {                        echo $val, PHP_EOL;                    }                    echo $gen->getReturn(), PHP_EOL;                    以上例程会输出:                    1                    2                    3 intdiv()              
  9. 用来进行 整数的除法运算 :

                        代码如下:                    var_dump(intdiv(10, 3));结果:int(3) 
  10. session_start() : 可以接受一个 array 作为参数

                        代码如下:                    session_start([                        'cache_limiter' => 'private',                        'read_and_close' => true,                    ]);
原创粉丝点击