日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

在php中源代码怎么查看,查看PHP Closure的源代码

發布時間:2023/12/10 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在php中源代码怎么查看,查看PHP Closure的源代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

您可以從PHP獲得的是有限的,使用反射您只需獲取函數的參數簽名以及源代碼文件的開始和結束行.我曾經寫過一篇博客文章:

http://www.metashock.de/2013/05/dump-source-code-of-closure-in-php/ ……

它引導我使用反射以下代碼:

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;

}

如果你有以下關閉:

$f = function (Closure $a, &$b = -1, array $c = array())

use ($foo)

{

echo $this->name;

echo 'test';

};

closure_dump()將給出以下結果:

function (Closure $a, &$b = -1, array $c = array (

)){

use ($foo)

{

echo $this->name;

echo 'test';

};

你看它不完美(數組參數).它也不會正確處理一些邊緣情況,特別是如果閉包是嵌套的,或者多個內聯閉包將傳遞給一行中的函數.后者對我來說看起來最成問題.因為,你只得到反射的起始行和結束行,在這種情況下,這兩個函數都將在那一行上,你沒有任何有用的信息來決定應該轉儲哪一行.到目前為止,我沒有找到解決方案,我也不確定是否有解決方案.

但是,在大多數情況下,只要您不依賴它,它至少應該對調試有幫助. Feel free to enhance it!

總結

以上是生活随笔為你收集整理的在php中源代码怎么查看,查看PHP Closure的源代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。