zoukankan      html  css  js  c++  java
  • php新增的一些特性

    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 TestPerson();
    $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	est;
        use const API;
        
        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];
    



  • 相关阅读:
    2.Android之按钮Button和编辑框EditText学习
    《DSP using MATLAB》Problem 3.8
    《DSP using MATLAB》Problem 3.7
    《DSP using MATLAB》Problem 3.6
    《DSP using MATLAB》Problem 3.5
    《DSP using MATLAB》Problem 3.4
    《DSP using MATLAB》Problem 3.3
    《DSP using MATLAB》Problem 3.2
    《DSP using MATLAB》Problem 3.1
    《DSP using MATLAB》Problem 2.20
  • 原文地址:https://www.cnblogs.com/jkko123/p/6387309.html
Copyright © 2011-2022 走看看