gpt4 book ai didi

php - 获取在 PHP 中执行当前函数的代码行和文件?

转载 作者:IT老高 更新时间:2023-10-28 12:09:23 37 4
gpt4 key购买 nike

假设我有以下情况:

文件1.php

<?php
include("Function.php");
log("test");
?>

函数.php

<?php
function log($msg)
{
echo "";
}
?>

我想更改日志功能,使其产生以下内容:

test (file: File1.php, line number: 3)

那么,有什么方法可以获取在 PHP 中执行当前函数的代码的文件名和行号?

编辑积压使用意见:当我在面向对象的编程方式中使用 backlog 时,我遇到了以下情况。

索引.php

<?php
include("Logger.static.php");
include("TestClass.class.php");
new TestClass();
?>

TestClass.class.php

<?php
class TestClass
{
function __construct()
{
Logger::log("this is a test log message");
}
}
?>

Logger.static.php

<?php
class Logger
{
static public function log($msg)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
echo $caller['file'];
echo $caller['line'];
}
}
?>

此示例将作为文件“Index.php”返回,并且作为第 4 行,这是启动类的位置。但是,它应该返回文件 TestClass.class.php 和第 6 行。知道如何解决这个问题吗?

最佳答案

您可以使用 debug_backtrace()。

http://us3.php.net/manual/en/function.debug-backtrace.php

因此,在您的日志函数中,您将能够检索调用日志函数的文件名和行号。

我在我的日志记录类中使用了这种方法,它显着减少了获取有意义的日志数据所需的代码量。另一个好处是可读性。与字符串混合时,魔术常数往往会变得非常难看。

这是一个简单的例子:

function log($msg)
{
$bt = debug_backtrace();
$caller = array_shift($bt);

// echo $caller['file'];
// echo $caller['line'];

// do your logging stuff here.
}

关于php - 获取在 PHP 中执行当前函数的代码行和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1252529/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com