php中的动态访问魔法常量
有没有一种快捷方式可以做到这一点:php中的动态访问魔法常量,php,Php,有没有一种快捷方式可以做到这一点: function a($where){ echo $where; } function b(){ a(basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__); } 对这样的事情: define("__myLocation__", ''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.''); function a($wher
function a($where){
echo $where;
}
function b(){
a(basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__);
}
对这样的事情:
define("__myLocation__", ''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.'');
function a($where){
echo $where;
}
function b(){
a(__mYLocation_);
}
我知道这不能用常量来完成(这只是一个理论示例),但我找不到缩短代码的方法。如果使用一个函数来获取我的行,它将获取该函数所在的行,而不是调用该函数的行
我通常会调用一个直接打印到日志文件的函数,但在我的日志中,我需要知道函数是从哪里调用的,所以我使用basename(uuu file_uu)。::'。u function_u。():'。u LINE_u
这将打印如下内容:
index.php::b()::6
当您在不同的文件中有500多个函数时,代码会非常多。有没有缩短或更好的方法。。我想你可以用eval和那个常数
define("__myLocation__", "''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.''");
function a($where){
echo $where;
}
function b(){
a(eval(__myLocation__));
}
但是你真的不应该用eval做任何事情。Ehh。。我想你可以用eval和那个常数
define("__myLocation__", "''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.''");
function a($where){
echo $where;
}
function b(){
a(eval(__myLocation__));
}
但是你真的不应该在任何事情上使用eval。debug\u backtrace()应该会对你有所帮助,尽管我不知道在你剪切的每一个日志中调用eval会对性能造成什么影响。试试这个:
function cut_log() {
$trace = debug_backtrace();
echo basename($trace[1]['file']) . '::' . $trace[1]['function']
. '::' . $trace[1]['line'];
}
function a() {
cut_log();
}
a();
debug_backtrace()应该会对您有所帮助,尽管我不知道在您剪切的每个日志中调用它会对性能造成什么影响。试试这个:
function cut_log() {
$trace = debug_backtrace();
echo basename($trace[1]['file']) . '::' . $trace[1]['function']
. '::' . $trace[1]['line'];
}
function a() {
cut_log();
}
a();
它用于记录所有内容:信息(用户所做的操作,如果它正在更改应用程序)、调试消息(如果调试处于启用状态)、警告和错误。请参阅此处,它也用于记录所有内容:信息(用户所做的操作,如果它正在更改应用程序)、调试消息(如果调试处于启用状态)、警告,和错误。在这里也可以看到@Gordon,
debug\u backtrace
不会增加太多开销。我想说,如果它有效,就使用它。@mattbasta这不是开销,而是原则。这是一个调试函数,主要用于错误处理。它不应该被误用来获取关于调用方对象的信息,除非它用于调试,而日志记录则不是。请参阅和@Gordon这似乎是使用debug\u backtrace
的一个非常合适的地方。即使这不是错误,谁在乎呢?它返回op需要的信息,并快速执行。这是一个日志套件:正是为debug\u backtrace
构建的。当然,它不是在处理错误,而是在服务于它的目的:描述执行的上下文。在这种情况下,没有合理的理由不使用debug\u backtrace
。@mattbasta我想,我们必须同意不同意。记录任意用户活动不是调试,也不是构建debug\u backtrace
的目的。如果记录器需要有关调用方的此信息,则应将其传递给它。这比在每次日志记录中创建完整的调用堆栈要快得多,也更合适。这对我来说是足够合理的论据。还有更多的人同意我的观点:@Gordon事实证明,debug\u backtrace
不会增加太多开销。我想说,如果它有效,就使用它。@mattbasta这不是开销,而是原则。这是一个调试函数,主要用于错误处理。它不应该被误用来获取关于调用方对象的信息,除非它用于调试,而日志记录则不是。请参阅和@Gordon这似乎是使用debug\u backtrace
的一个非常合适的地方。即使这不是错误,谁在乎呢?它返回op需要的信息,并快速执行。这是一个日志套件:正是为debug\u backtrace
构建的。当然,它不是在处理错误,而是在服务于它的目的:描述执行的上下文。在这种情况下,没有合理的理由不使用debug\u backtrace
。@mattbasta我想,我们必须同意不同意。记录任意用户活动不是调试,也不是构建debug\u backtrace
的目的。如果记录器需要有关调用方的此信息,则应将其传递给它。这比在每次日志记录中创建完整的调用堆栈要快得多,也更合适。这对我来说是足够合理的论据。还有更多的人同意我的观点: