function func() {
// ...
}
我有函数名"func"
,但不是它的定义。
在JavaScript中,我只是使用alert()
来查看定义。
PHP中是否有类似的功能?
答案 0 :(得分:9)
您可以使用ReflectionFunctionAbstract中定义的getFileName(),getStartLine(),getEndLine()方法从源文件中读取函数/方法的源代码(如果有的话)。
e.g。 (没有错误处理)
<?php
printFunction(array('Foo','bar'));
printFunction('bar');
class Foo {
public function bar() {
echo '...';
}
}
function bar($x, $y, $z) {
//
//
//
echo 'hallo';
//
//
//
}
//
function printFunction($func) {
if ( is_array($func) ) {
$rf = is_object($func[0]) ? new ReflectionObject($func[0]) : new ReflectionClass($func[0]);
$rf = $rf->getMethod($func[1]);
}
else {
$rf = new ReflectionFunction($func);
}
printf("%s %d-%d\n", $rf->getFileName(), $rf->getStartLine(), $rf->getEndLine());
$c = file($rf->getFileName());
for ($i=$rf->getStartLine(); $i<=$rf->getEndLine(); $i++) {
printf('%04d %s', $i, $c[$i-1]);
}
}
答案 1 :(得分:0)
我不知道。请参见底部的代码。有一个function to list all the defined functions。另有get the values of all the arguments to the current function和number of arguments。还有一个see if a function exists。但似乎没有一个人可以命名当前的函数,也没有任何列出正式参数的方法。
即使发生运行时错误,它也不会列出调用堆栈,也不会声明激活的函数:
PHP Warning: Division by zero in t.php on line 6
编辑:要识别代码的代码,请添加:
echo "At line " .__LINE__ ." of file " . __FILE__ ."\n";
它给出输出
At line 7 of file /home/wally/t.php
编辑2:我在我的代码中发现了这个函数,它看起来像你想要的那样:
function traceback ($showvars)
{
$s = "";
foreach (debug_backtrace($showvars) as $row)
{
$s .= "$row[file]#$row[line]: ";
if(isset($row['class']))
$s .= "$row[class]$row[type]$row[function]";
else $s .= "$row[function]";
if (isset($row['args']))
$s .= "('" . join("', '",$row['args']) . "')";
$s .= "<br>\n";
}
return $s;
}
例如,它产生:
[wally@zf ~]$ php -f t.php
/home/wally/t.php#24: traceback('1')<br>
/home/wally/t.php#29: t('1', '2', '3')<br>
/home/wally/t.php#30: x('2', '1')<br>
/home/wally/t.php#31: y('2', '1')<br>
/home/wally/t.php#33: z('1', '2')<br>