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!
eval() का उपयोग किये बिना संशोधन के बाद परिणामस्वरूप कोड का मूल्यांकन कैसे किया जा सकता है? – Omranic
* संशोधन के बाद * के साथ आपका क्या मतलब है? – hek2mgl
मुझे पता है कि यह पुराना है, लेकिन यह अभी भी मेरे लिए एक मामला है .. ठीक है, संशोधन के बाद इसका मतलब है कि मैंने परिलक्षित क्लोजर कोड लिया है, कुछ लाइनों को हटा दिया है और दूसरों को जोड़ा है, और चूंकि यह अब सिर्फ एक स्ट्रिंग है, मुझे मूल्यांकन करना होगा eval() – Omranic