私は独自のデバッグ機能を書いていますが、以下のコードを修正するために助けが必要です。
変数とその名前、変数と関数が宣言されたファイル、および関数呼び出しの行を出力しようとしています。私が行った最初の部分、変数、変数名、ファイル、および行は正しく出力されます。コードでは、a($variable)はうまく機能します。
問題は、この関数が変数から文字列も受け入れることです。しかし、PHP は致命的なエラー ( PHP Fatal error: Only variables can pass by reference in ... )を返します。コードでは、a('text out') .
では、変数または文字列を正しく受け入れるようにこのコードを修正するにはどうすればよいでしょうか?
コード (編集):
function a(&$var){
$backtrace = debug_backtrace();
$call = array_shift($backtrace);
$line = $call['line'];
$file = $call['file'];
echo name($var)."<br>".$var."<br>".$line."<br>".$file;
}
$variable='text in';
a($variable);
a('text out');
以下のこの関数を使用するには、参照によって変数を渡す必要があります (関数は変数名を正しく取得し、配列でも機能します)。
function name(&$var, $scope=false, $prefix='unique', $suffix='value'){
if($scope) $vals = $scope;
else $vals = $GLOBALS;
$old = $var;
$var = $new = $prefix.rand().$suffix;
$vname = FALSE;
foreach($vals as $key => $val) {
if($val === $new) $vname = $key;
}
$var = $old;
return $vname;
}