Maison >développement back-end >tutoriel php > 私家调试函数求优化

私家调试函数求优化

WBOY
WBOYoriginal
2016-06-13 12:57:05846parcourir

私人调试函数求优化
1.可能有点异想天开,我希望获取调用这个函数的文件的文件名和行数,目前的死办法是外面传__FILE__和__LINE__

2.我想获取外面传的调试变量的名称,例如你有个变量叫  $abc = 'fdsafs'; 这样赋值了,然后  debug($abc);   我能在这个函数内部想办法知道这个变量的名称叫  abc

3.获取变量类型,类似别的语言的typeof,现在来一个变量,假设它是字符串,却没办法echo typeof($data)   ,却要if(is_string($data))echo 'string';...

4.你能提出的更多优化建议,写一写你的改造结果~


====================
这个函数从当初最简单的
function debug($data, $die = false){
    echo '

';<br>
    print_r($data);<br>
    echo '
';
    if($die)die();
}
到今天如下面的代码,已经是一年多了~方便自己调试变量值.我也懒得学那些什么复杂的调试框架什么xDebug..其实我要调试的需求在上面说的和下面代码体现的都有了,没更多的要求.
大家有没有试过,在一个很大的程序体里,到处echo一些值,在调试完后修正代码后,运行时还发现有调试的echo值输出,却不记得这个echo放哪里了- -   所以我需要知道这个调用的文件位置和行号.包括其它更多的调试需求,其实也不是很多,知道变量内容,长度,类型,它变成这个内容的文件位置就行了.



上代码:

$a = 'xx';
$b = 45;
$c = true;
$d = false;
$e = null;
$f = new stdClass();
$g = array(
    'a' => 'v1',
    'b' => 'v2',
);


debug($a);
debug($b);
debug($c);
debug($d);
debug($d);
debug($e);
debug($f);
debug($g);


function debug($data, $die = false, $file = null, $line = null){
    static $debugCount = 0; //调试计数器
    echo '
================= 新的调试点: '.++$debugCount.'========================
';
    if($file)echo "文件名: $file
\n";
    if($line)echo "行数: $line
\n";
    $len = strlen($data);
    if($len)echo '内容长度:'.$len."
\n";
    echo "变量名称: a
\n"; //有没有办法获取到外面传参时,debug($a);的变量名称 'a'?
    echo "
\n";<br>
    print_r(var_export($data, true));<br>
    echo "
\n";


    if($die){
        exit('
返回');
    }
    else return $debugCount;
}

------解决方案--------------------
function debug()<br />
{<br />
    global $config;<br />
    if(!$config['debug']) {<br />
        return;<br />
    }<br />
<br />
    echo '<pre class="brush:php;toolbar:false">';<br />
    foreach(func_get_args() as $var)<br />
    var_dump($var);<br />
    echo '
';
}
function fdebug()
{
    global $config;
    if(!$config['debug']) {
        return;
    }
    foreach(func_get_args() as $var) {
        file_put_contents('./aaa_yii_debug.php', ''.PHP_EOL . PHP_EOL, FILE_APPEND);
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn