【发布时间】:2010-08-02 11:38:15
【问题描述】:
是否可以让函数自动包含行号和调用该函数的文件,
就像我在函数中调用 __LINE__ 或 __FILE__ 一样,它将使用函数定义所在的行和文件。
但我不想每次都将__LINE__ 和__FILE__ 传递给函数。
所以如果我将它们设置为默认参数,它们是来自函数定义还是从哪里调用?
【问题讨论】:
是否可以让函数自动包含行号和调用该函数的文件,
就像我在函数中调用 __LINE__ 或 __FILE__ 一样,它将使用函数定义所在的行和文件。
但我不想每次都将__LINE__ 和__FILE__ 传递给函数。
所以如果我将它们设置为默认参数,它们是来自函数定义还是从哪里调用?
【问题讨论】:
按照你的建议去做似乎没有用。
您可以这样做,但我不确定您为什么要这样做,并且没有更好的方法来实现您想要实现的目标 - 请参阅 Wrikken's answer。
<?php
function test() {
$backtrace = debug_backtrace();
$last = $backtrace[0];
echo "{$last['function']}() called from {$last['file']} line {$last['line']}\r\n";
}
test();
【讨论】:
唯一的方法是使用debug_backtrace(),但顾名思义:它是用于调试的。您的代码应不根据调用位置/时间在生产中附加任何含义或功能。
【讨论】:
trigger_error 的函数将幸运地自动添加文件和行,根据当前的错误处理设置输出错误消息 - 显示或日志文件。很方便
太晚了,但也许有用,你可以使用 get_call_class(),作为被调用的类的名称,不要像 CLASS 的参数一样传递。
【讨论】:
如果您想在某种错误消息中使用此信息,有一个函数trigger_error() 会引发 PHP 原生错误,因此,它将以通常的 PHP 方式显示 - 带有文件名、行号和提供的文本。
此函数最简洁的功能是根据当前的错误处理设置进行操作:
ini_set('display_errors',1);
trigger_error("Horrible bug found!");
会直接打印出这样的错误信息:
Notice: Horrible bug found! in /path/file.php on line 2
非常适合开发
而这段代码
ini_set('display_errors',0);
ini_set('log_errors',1);
trigger_error("Horrible bug found!");
将被放入错误日志以供将来参考
生产必备
【讨论】: