PHP是我的函数,来自echo或sprintf

时间:2015-09-12 15:56:06

标签: php macos printf echo debug-backtrace

我想查看函数的调用位置。

函数是在echo或sprintf中调用的吗?然后返回,否则回复内容。

我得到了这段代码(test.php):

<?php
function __($str = '')
{
    // who is my parent?
    $parent=debug_backtrace();

    if ( isset ( $parent[1] ) )
        $parent = $parent[1]['function']; //Did it!
    else
        $parent = debug_backtrace()[1]['function']; //Try

    if ( empty ( $parent ) )
        $parent = "ERROR!";

    return sprintf("[%s] %s.%s", $parent, $str, PHP_EOL);
}

__('does nothing');
echo __('test from echo #1');
echo(__('test from echo #2'));
echo sprintf(__('test from sprintf #1'));
echo(sprintf(__('test from sprintf #2')));
?>

当我在终端输入时,我得到的是:

WDGMBP:Test Wes$ php test.php 
[ERROR!] test from echo #1.
[ERROR!] test from echo #2.
[ERROR!] test from sprintf #1.
[ERROR!] test from sprintf #2.

(p.s。来自网络相同)

我的PHP版本是:

WDGMBP:BIHappyV3 Wes$ php -v
PHP 5.5.27 (cli) (built: Aug 22 2015 18:20:44) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

1 个答案:

答案 0 :(得分:1)

您对debug_backtrace的工作方式感到困惑。它返回执行调用的函数,而不是将使用结果调用的函数。例如。如果你有:

function testit() {
    someFunc(__('something'));
}

然后$parent[1]['function']将包含testit,而不是someFunc

我认为没有办法获得someFunc。该功能不在堆栈的任何位置,因为在 __()返回后,它才会被调用。