在PHP中使用宏来调用函数中的__FILENAME__的正确方法

时间:2014-06-22 21:54:12

标签: php codeigniter macros phpunit

我正在使用CodeIgniter中的PHPUnit,并创建了一个支持方法,允许我将输出动态转储到以调用函数命名的文件,文件存储在与调用文件路径相同的目录树中。

该函数运行良好(从CIUnit_TestCase中实现),并且当前被调用:

$this->dumpOutputToFile($out, __FILE__, __CLASS__, __FUNCTION__);

我宁愿按照

的方式做点什么
$this->dumpOutputToFile($out);

甚至(虽然仍然有些hacky)

$this->dumpOutputToFile($out, $this);

问题是在“dumpOutputToFile()”方法中魔术宏不再存在(当然)并且遗憾的是使用debug_backtrace()没有任何帮助,因为从返回的值内部不包括'文件'或'line'属性(虽然它们在通话之外可用。)

所以我正在寻找最干净/最简单的方法来实现对dumpOutputToFile()的调用,只需使用少量参数等。

宏可以没问题,但那些不可用。使用debug_backtrace会没问题但是它没有从内部提供正确的信息。我也听说过XDebug的事情让我对这些问题更加简单,但我还没有带宽来安装它。

以下是我在函数内部使用的代码示例:

$myDbg = debug_backtrace();
print "Printing array keys 'inside' ({$myDbg[0]['function']}) function:\n";
print_r(array_keys($myDbg['0']));

print "\n\nPrinting array keys to 'parent' ({$myDbg[1]['function']}) function:\n";
print_r(array_keys($myDbg['1']));

我得到的结果......我想要的值不适用于调用函数:

Printing array keys 'inside' (dumpOutputToFile) function:
Array
(
    [0] => file
    [1] => line
    [2] => function
    [3] => class
    [4] => object
    [5] => type
    [6] => args
)

Printing array keys to 'parent' (testIndex) function:
Array
(
    [0] => function
    [1] => class
    [2] => object
    [3] => type
    [4] => args
)

0 个答案:

没有答案