PHP7新特性

PHP7新特性

  1. 特性一:
    
    //----------php5.0+ 版本 运行效果
    //代码一
    $a = array(1,2,3);
    foreach($a as $v){
        
        var_dump(current($a);
    }
    
    //result: int 2,int 2,int 2
    
    // 代码二
    $a = array(1,2,3);
    $b = $a;
    foreach($a as $v){
        var_dump(current($a));
    }
    
    // result: int 1,int 1,int 1
    
    // 代码三
    $a = array(1,2,3);
    $b = &$a;
    foreach($a as $v){
        var_dump(current($a));
    }
    
    // result:int 2,int 3,bool false
    
    // 原因迭代器foreach会干涉到变量$a的指针
    
    //-------以上三段代码在php7.0的运行效果都为
    // result: int 1,int 1,int 1
    // 在php7中迭代器不会影响变量的指针。
  1. 特性二,新操作符 <=>,比较两个值得大小

$a <=> $b; 
// 相当于 $a > $b ? 1 : ($a < $b ? -1 : 0);
  1. 异常捕获 Throwable
try {
    $a = new A();
} catch (Throwable $e) {
    print_r($e);
    echo $e->getLine() . PHP_EOL;
    echo $e->getFile() . PHP_EOL;
    echo $e->getMessage();
}


// 输出
Error Object
(
    [message:protected] => Class 'A' not found
    [string:Error:private] => 
    [code:protected] => 0
    [file:protected] => /Users/fym/Documents/code/php/miaosha/test.php
    [line:protected] => 4
    [trace:Error:private] => Array
        (
        )

    [previous:Error:private] => 
)
4
/Users/fym/Documents/code/php/miaosha/test.php
Class 'A' not found
  1. register_shutdown_function() 注册终止函数
    • 注册终止函数, 在程序执行完毕, 发生异常退出时会执行这里注册的函数。
class Test
{

    function abort() {

        echo '这是终止方法' . PHP_EOL;

        if(error_get_last()) {
            // error_log('1232');
            print_r(error_get_last());
        }

        echo 'abort after' . PHP_EOL;
    }

}

function abort() {

    echo '这是终止函数' . PHP_EOL;
}
// 注册函数
register_shutdown_function('abort');
// 注册类的方法
register_shutdown_function([new Test, 'abort']);

$a = new A();

echo 'hello world' . PHP_EOL;
  1. spl_autoload_register() 类的自动加载,php5.3就有了
    • 先使用该函数注册加载方法,该方法会传入类名
    • 当程序中使用没有导入的类时,php会自动调用注册的方法加载类
    • 当使用use引入的类时, 类名就是use后面的路径,导入文件时需要把反斜杠转换为斜杠。
    • 可以多次调用该函数注册多个加载器,多个加载器会依次执行,知道找到类文件,否则触发报错机制
    • 自定义抛出的异常可以使用try-catch捕获, 如果不自定义异常,系统抛出的异常则不能被捕获。
        define('ROOT_PATH', './');
        spl_autoload_register(function($class_name){
            
            $path = ROOT_PATH . $class_name . '.php';
            if(is_file($path)) {
                require $path;
            } else {
                throw new Exception("class name not found: {$class_name}");
            }
        });
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值