在php中源代码怎么查看,查看PHP Closure的源代码
您可以從PHP獲得的是有限的,使用反射您只需獲取函數(shù)的參數(shù)簽名以及源代碼文件的開始和結(jié)束行.我曾經(jīng)寫過一篇博客文章:
http://www.metashock.de/2013/05/dump-source-code-of-closure-in-php/ ……
它引導(dǎo)我使用反射以下代碼:
function closure_dump(Closure $c) {
$str = 'function (';
$r = new ReflectionFunction($c);
$params = array();
foreach($r->getParameters() as $p) {
$s = '';
if($p->isArray()) {
$s .= 'array ';
} else if($p->getClass()) {
$s .= $p->getClass()->name . ' ';
}
if($p->isPassedByReference()){
$s .= '&';
}
$s .= '$' . $p->name;
if($p->isOptional()) {
$s .= ' = ' . var_export($p->getDefaultValue(), TRUE);
}
$params []= $s;
}
$str .= implode(', ', $params);
$str .= '){' . PHP_EOL;
$lines = file($r->getFileName());
for($l = $r->getStartLine(); $l < $r->getEndLine(); $l++) {
$str .= $lines[$l];
}
return $str;
}
如果你有以下關(guān)閉:
$f = function (Closure $a, &$b = -1, array $c = array())
use ($foo)
{
echo $this->name;
echo 'test';
};
closure_dump()將給出以下結(jié)果:
function (Closure $a, &$b = -1, array $c = array (
)){
use ($foo)
{
echo $this->name;
echo 'test';
};
你看它不完美(數(shù)組參數(shù)).它也不會正確處理一些邊緣情況,特別是如果閉包是嵌套的,或者多個內(nèi)聯(lián)閉包將傳遞給一行中的函數(shù).后者對我來說看起來最成問題.因為,你只得到反射的起始行和結(jié)束行,在這種情況下,這兩個函數(shù)都將在那一行上,你沒有任何有用的信息來決定應(yīng)該轉(zhuǎn)儲哪一行.到目前為止,我沒有找到解決方案,我也不確定是否有解決方案.
但是,在大多數(shù)情況下,只要您不依賴它,它至少應(yīng)該對調(diào)試有幫助. Feel free to enhance it!
總結(jié)
以上是生活随笔為你收集整理的在php中源代码怎么查看,查看PHP Closure的源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 庞氏骗局的特点,庞氏骗局和传销有什么区别
- 下一篇: java for循环 等待_java