0

レイトスタティックバインディングを使用して、呼び出し元の関数の情報(ファイル名、行、関数...)を取得することは可能ですか?

<?php
class Log{
    public static function write($msg){
        $line = ??;
        $msg = date('Y-m-d H:i:s').' '.$line.' '.$msg;
    }
}

Log::write("wuhuu!"); // write new log entry including >>this<< line/filename/..
?>

以前Iused debug_backtrace()またはnew \Exception+ getTrace()。いくつかの素晴らしい超特別なレイトスタティックバインディング機能(キーワード/関数)を使用することは可能(または簡単)でしょうか?

4

3 に答える 3

1

ええ、

PHPは、実行するスクリプトに多数の事前定義された定数を提供します。ただし、これらの定数の多くはさまざまな拡張機能によって作成され、動的ロードを介して、またはでコンパイルされているために、これらの拡張機能が使用可能な場合にのみ存在します。

使用場所に応じて変化する8つの魔法の定数があります。たとえば、LINEの値は、スクリプトで使用されている行によって異なります。これらの特殊定数は大文字と小文字を区別せず、次のとおりです。

_ LINE __ CLASS __ METHOD _、など

http://php.net/manual/en/language.constants.predefined.php

ただし、そのデータをlog( _ LINE _、_ METHOD _ )のようなメソッドに渡す必要があります。

グローバル警告については、 http://www.php.net/manual/en/function.set-error-handler.phpでキャッチできます。

それ以外は..

于 2012-08-21T13:09:06.867 に答える
1

XDebug拡張機能を確認する必要があります。

xdebug_call_file()、xdebug_call_line()、xdebug_call_class()、xdebug_call_function()

これらの種類の関数(XDebug、debug_backtrace())は、実稼働環境では推奨されません。

于 2012-08-21T13:12:50.490 に答える
1

残念ながらdebug_backtrace、これは非常に非効率的ですが、おそらくあなたの最善の方法です。

別の方法は、行とファイルをログメソッドに戻すことです...

Log::write("wuhuu!", __LINE__, __FILE__);

それはお尻の痛みですが、私は別の解決策を見ることができません。

于 2012-08-21T13:33:49.610 に答える