PHP5.5.3升级PHP7.0.2

  1. 用数组标识符为类定义数组类型的属性时,数组的键不会被覆盖

     
     
             
    1
    <?php
    2
    class C {
    3
        const ONE = 1;
    4
        public $array = [
    5
            self::ONE => 'foo',
    6
            'bar',
    7
            'quux',
    8
        ];
    9
    }
    10
    var_dump((new C)->array);
    11
    /*
    12
    5.5.x 输出
    13
    array(2) {
    14
      [0]=>
    15
      string(3) "bar"
    16
      [1]=>
    17
      string(4) "quux"
    18
    }
    19
    20
    7.0.x输出
    21
    array(3) {
    22
      [1]=>
    23
      string(3) "foo"
    24
      [2]=>
    25
      string(3) "bar"
    26
      [3]=>
    27
      string(4) "quux"
    28
    }
    29
    */
  2. 严格的 json_decode(),对于 JSON 字面量 true,false 和 null,如果不采用小写格式,将会被 json_decode() 函数拒绝, 同时相应的设置 json_last_error()

  3. Mcrypt 函数需要有效长度的密钥和初始向量

  4. cURL 文件上传:必须先设置 CURLOPT_SAFE_UPLOAD 为 FALSE 才能够使用 @file 语法来上传文件。 建议使用 CURLFile 类来上传文件。

  5. set_exception_handler() 不再保证收到的一定是 Exception 对象

     
     
             
    1
    <?php
    2
    // PHP 5 时代的代码将会出现问题
    3
    function handler(Exception $e) { ... }
    4
    set_exception_handler('handler');
    5
    6
    // 兼容 PHP 5 和 7
    7
    function handler($e) { ... }
    8
    9
    // 仅支持 PHP 7
    10
    function handler(Throwable $e) { ... }
  6. 定义抽象静态方法直接报错

  7. 重复定义构造器函数直接报错

  8. 内部构造器出错直接抛异常(原来返回null)

  9. 两个trait中包含相同的属性直接报错

  10. 关于间接使用变量、属性和方法的变化。使用了旧的从右到左的解析顺序的代码必须被重写,明确的使用圆括号来表明顺序

    表达式PHP 5 的解析方式PHP 7 的解析方式
    $$foo['bar']['baz']${$foo['bar']['baz']}($$foo)['bar']['baz']
    $foo->$bar['baz']$foo->{$bar['baz']}($foo->$bar)['baz']
    $foo->$bar['baz']()$foo->{$bar['baz']}()($foo->$bar)['baz']()
    Foo::$bar['baz']()Foo::{$bar['baz']}()(Foo::$bar)['baz']()
  11. global只接受简单变量,可变变量不再能够与 global 关键字一起使用。 如果需要的话可以使用圆括号来模拟之前的行为。

     
     
            
    1
    <?php
    2
    function f() {
    3
        // Valid in PHP 5 only.
    4
        global $$foo->bar;
    5
    6
        // Valid in PHP 5 and 7.
    7
        global ${$foo->bar};
    8
    }

     

  12. call_user_method() and call_user_method_array()被移除

  13. new 操作符创建的对象不能以引用方式赋值给变量

  14. 函数定义不可以包含多个同名参数

  15. Switch 语句不可以包含多个 default 块

  16. 在函数中检视参数值会返回 当前 的值

     
     
             
    1
    <?php
    2
    function foo($x) {
    3
        $x++;
    4
        var_dump(func_get_arg(0));
    5
    }
    6
    foo(1);//2
  17. 不再提供 $HTTP_RAW_POST_DATA 变量。 请使用 php://input 作为替代。

  18. INI 文件中 # 注释格式被移除,即使用#注释依旧会被解析

     
     
             
    1
    ;test.ini 文件
    2
    #test=1
    3
    name=xiao
     
     
             
    1
    <?php
    2
    $arr = parse_ini_file('test.ini');
    3
    var_dump($arr);
    4
    /*
    5
    输出
    6
    array(2) {
    7
      ["#test"]=>
    8
      string(1) "1"
    9
      ["name"]=>
    10
      string(4) "xiao"
    11
    }
    12
    */

     

  19. JSON 扩展已经被 JSOND 取代。对于数值的处理,有以下两点需要注意的: 第一,数值不能以点号(.)结束 (例如,数值 34. 必须写作 34.0 或 34)。 第二,如果使用科学计数法表示数值,e 前面必须不是点号(.) (例如,3.e3 必须写作 3.0e3 或 3e3)。 另外,空字符串不再被视作有效的 JSON 字符串。

  20. 将浮点数转换为整数的时候,如果浮点数值太大,导致无法以整数表达的情况下, 在之前的版本中,内部函数会直接将整数截断,并不会引发错误。 在 PHP 7.0 中,如果发生这种情况,会引发 E_WARNING 错误,并且返回 NULL

  21. 由于内部排序算法进行了提升, 可能会导致对比时被视为相等的多个元素之间的顺序不稳定。

  22. foreach不再改变内部数组指针

    1. foreach 通过值遍历时,循环操作的value值为数组的副本,但如果对数组本身进行修改,foreach结束后会生效。

       
       
                 
      1
      <?php
      2
      $arr = [1,2,3];
      3
      foreach($arr as $v){
      4
          var_dump($v);
      5
          $arr[1] = 5;
      6
          $arr[3] = 10;
      7
      }
      8
      print_r($arr);
      9
      /*
      10
      php7输出:
      11
      int(1)
      12
      int(2)
      13
      int(3)
      14
      Array
      15
      (
      16
          [0] => 1
      17
          [1] => 5
      18
          [2] => 3
      19
          [3] => 10
      20
      )
      21
      */
    2. foreach通过引用遍历时,操作的value是其本身的值,所有修改会在foreach内部生效。

       
       
                 
      1
      <?php
      2
      $arr = [1,2,3];
      3
      foreach($arr as &$v){
      4
          var_dump($v);
      5
          $arr[1] = 5;
      6
          $arr[3] = 10;
      7
      }
      8
      print_r($arr);
      9
      /*
      10
      int(5)
      11
      int(3)
      12
      int(10)
      13
      Array
      14
      (
      15
          [0] => 1
      16
          [1] => 5
      17
          [2] => 3
      18
          [3] => 10
      19
      )
      20
      */
  23. 十六进制字符串不再被认为是数字

     
     
            
    1
    <?php
    2
    var_dump("0x123" == "291");
    3
    var_dump(is_numeric("0x123"));
    4
    var_dump("0xe" + "0x1");
    5
    var_dump(substr("foo", "0x1"));
    6
    7
    /*
    8
    php5输出:
    9
    10
    bool(true)
    11
    bool(true)
    12
    int(15)
    13
    string(2) "oo"
    14
    15
    php7输出:
    16
    17
    bool(false)
    18
    bool(false)
    19
    PHP Notice:  A non well formed numeric value encountered in /root/test/string.php on line 4
    20
    PHP Notice:  A non well formed numeric value encountered in /root/test/string.php on line 4
    21
    int(0)
    22
    PHP Notice:  A non well formed numeric value encountered in /root/test/string.php on line 5
    23
    string(3) "foo"
    24
    */

    filter_var() 函数可以用于检查一个 string 是否含有十六进制数字,并将其转换为integer:

     
     
             
    1
    <?php
    2
    $str = "0xffff";
    3
    $int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
    4
    if (false === $int) {
    5
        throw new Exception("Invalid integer!");
    6
    }
    7
    var_dump($int); // int(65535)

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值