PHP で現在の関数を実行しているコード行とファイルを取得しますか?
2023-11-30 12:39:12
質問
次のような状況があるとします。
ファイル1.php
<?php
include("Function.php");
log("test");
?>
関数.php
<?php
function log($msg)
{
echo "";
}
?>
log関数が以下のように出力されるように変更したいです。
test (ファイル: File1.php, 行数: 3)
では、PHPで現在の関数を実行したコードのファイル名と行番号を取得する方法はあるのでしょうか?
バックログ使用コメントをEDITしました。 オブジェクト指向のプログラミングで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
つまり、log関数では、log関数が呼び出されたファイル名と行番号を取得することができるようになるわけです。
私はロギング クラスでこのアプローチを使用しており、意味のあるログ データを取得するために必要なコードの量を大幅に削減しました。もう 1 つの利点は、可読性です。マジック定数は、文字列と混在すると、かなり醜くなる傾向があります。
ここに簡単な例があります。
function log($msg)
{
$bt = debug_backtrace();
$caller = array_shift($bt);
// echo $caller['file'];
// echo $caller['line'];
// do your logging stuff here.
}
関連
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み] 警告:mysqli_fetch_array()は、パラメータ1がmysqli_resultであることを期待する、オブジェクトはで指定された。
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。
-
[解決済み] PHPを使って現在の年を取得するにはどうすればよいですか?
-
[解決済み] PHPで完全なURLを取得する
-
[解決済み] PHPの文字列で、シングルクオートとダブルクオートの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み】Laravel 5.2 Storage::makeDirectory($dir) でディレクトリが作成されない。
-
[解決済み】PHP フェイタルエラー。未定義の関数mssql_connect()をコールしています。
-
[解決済み】PHPの予期しないT_VARIABLEとは何ですか?
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
MacでPHPを実行した際に、メモリサイズが134217728バイトも消費される問題の解決方法について
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み] Uncaught Error: 未定義の関数 mysql_escape_string() の呼び出し。