php版本升级更新

PHP5.5更新

  1. 不再支持windows xp 和 2003

  2. yield 生成器

    生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。

    使用生成器循环,可以降低内存使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    function xrange($start, $limit, $step = 1)
    {
    for ($i = $start; $i <= $limit; $i += $step) {
    yield $i;
    }
    }


    foreach (xrange(1, 100000, 2) as $k => $val) {
    echo 'key:' . $k . ' and val:' . $val . "<br>";
    }
  3. 新增finally关键字

    不论是否异常,始终会执行finally,如果都有返回值,finally将会覆盖t ry,catch中的返回

    1
    2
    3
    4
    5
    6
    7
    try{
    return 1;
    }catch(){
    return 2;
    }finally{
    return 3;
    }
  1. foreach支持list()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $arr = [
    [1,3,4],
    [2,3,5]
    ];
    foreach ($arr as list($a, $b)) {
    echo $a . '-' . $b . ' ';
    }
    //输出:1-3 2-3
  1. empty()支持任意表达式

    1
    2
    empty($a+$b);
    empty($a == $b);
  1. ArrayString支持直接获取元素

    1
    2
    echo [1,2,3][0]; // 1
    echo 'abc'[0] // a
  2. 新增密码算法 password_hash

    1
    2
    3
    4
    5
    <?php
    $str = password_hash(123456,PASSWORD_DEFAULT);
    password_verify('123456',$str);
    password_needs_rehash($str,PASSWORD_DEFAULT,['cost'=>15]);
    password_get_info($str);
  3. 废弃mysql扩展

  4. preg_replace函数中用到的\e修饰符现在被弃用

  5. 使用 NULL 作为参数调用 set_error_handler() 将重置错误处理程序。

  6. 当使用 NULL 调用set_error_handler()set_exception_handler() 时, 现在分别返回上一个错误或异常处理程序。

  7. 新增函数 array_column()

    说明:array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <?php
    $records = array(
    array(
    'id' => 2135,
    'first_name' => 'John',
    'last_name' => 'Doe',
    ),
    array(
    'id' => 3245,
    'first_name' => 'Sally',
    'last_name' => 'Smith',
    ),
    array(
    'id' => 5342,
    'first_name' => 'Jane',
    'last_name' => 'Jones',
    ),
    array(
    'id' => 5623,
    'first_name' => 'Peter',
    'last_name' => 'Doe',
    )
    );
    var_dump(array_column($records,'first_name'));
    //返回如下:
    array (size=4)
    0 => string 'John' (length=4)
    1 => string 'Sally' (length=5)
    2 => string 'Jane' (length=4)
    3 => string 'Peter' (length=5)

    var_dump(array_column($records,'first_name','id'));
    //返回如下:
    array (size=4)
    2135 => string 'John' (length=4)
    3245 => string 'Sally' (length=5)
    5342 => string 'Jane' (length=4)
    5623 => string 'Peter' (length=5)
    var_dump(array_column($records,'first_name','last_name'))
    //返回如下:后面的会覆盖相同的健名
    array (size=3)
    'Doe' => string 'Peter' (length=5)
    'Smith' => string 'Sally' (length=5)
    'Jones' => string 'Jane' (length=4)
  8. 新增boolval()函数

    说明:将变量转换为bool值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    echo '0: '.(boolval(0) ? 'true' : 'false')."\n";
    echo '42: '.(boolval(42) ? 'true' : 'false')."\n";
    echo '0.0: '.(boolval(0.0) ? 'true' : 'false')."\n";
    echo '4.2: '.(boolval(4.2) ? 'true' : 'false')."\n";
    echo '"": '.(boolval("") ? 'true' : 'false')."\n";
    echo '"string": '.(boolval("string") ? 'true' : 'false')."\n";
    echo '"0": '.(boolval("0") ? 'true' : 'false')."\n";
    echo '"1": '.(boolval("1") ? 'true' : 'false')."\n";
    echo '[1, 2]: '.(boolval([1, 2]) ? 'true' : 'false')."\n";
    echo '[]: '.(boolval([]) ? 'true' : 'false')."\n";
    echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n";
    ?>
    //执行结果:
    0: false
    42: true
    0.0: false
    4.2: true
    "": false
    "string": true
    "0": false
    "1": true
    [1, 2]: true
    []: false
    stdClass: true