美文网首页
Kint的Modifier的实现

Kint的Modifier的实现

作者: oraoto | 来源:发表于2017-04-24 13:30 被阅读24次

    Kint是一个超级加强版的var_dump,使用很简单:

    <?php
    Kint::dump($GLOBALS, $_SERVER); 
    
    kint.png

    除此以外,Kint还支持用modifier改变输出的结果:

    <?php
    +Kint::dump($data); // Disabled depth limit
    !Kint::dump($data); // Expand all data in this dump automatically
    @Kint::dump($data); // Return the output of this dump instead of echoing it
    ...
    

    虽然这是PHP的语法,但是一个函数怎样根据函数调用前的符号改变自己的行为呢?

    想起之前写过一个输出变量和类型的函数

    function var_types() {
        $bt = debug_backtrace()[0];
        $file = new \SPLFileObject($bt['file']);
        $file->seek($bt['line'] - 1);
        $line = $file->current();
        $matchs = null;
        preg_match('/var_types\((.*)\)/', $line, $matchs);
        $param_names = array_map('trim', explode(",", $matchs[1]));
        $args = func_get_args();
    
        for ($i = 0; $i < count($args); $i++) {
            echo $param_names[$i] . ' ' . gettype($args[$i]) . PHP_EOL;
        }
    }
    

    原理是通过debug_backtrace拿到函数调用的位置(文件+行数),然后去解析文件。通常用PHP(而不是C扩展)实现var_dump,都是类似的方法。Kint也不例外,只是它的解析更强大:SourceParser.php

    相关文章

      网友评论

          本文标题:Kint的Modifier的实现

          本文链接:https://www.haomeiwen.com/subject/ukfpzttx.html