ฉันจะทราบได้อย่างไรว่าไฟล์และบรรทัดใดที่ฟังก์ชันกำหนดถูกกำหนดไว้
ฉันจะทราบได้อย่างไรว่าไฟล์และบรรทัดใดที่ฟังก์ชันกำหนดถูกกำหนดไว้
คำตอบ:
คุณสามารถทำได้ใน PHP เอง:
$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();
$reflFunc = new ReflectionMethod($this, 'method_name');
ใช้ IDE ที่อนุญาตให้ทำเช่นนั้น (ฉันขอแนะนำ Eclipse PDT) หรือคุณสามารถ grep ทั้งหมดได้หากใช้บน Linux หรือใช้ wingrep ใน Linux มันจะเป็นดังนี้:
grep -R "function funName" *
จากภายในโฟลเดอร์รากของโครงการ
หากคุณใช้ IDE เช่น Netbeans คุณสามารถ CTRL + คลิกฟังก์ชันที่ใช้และจะนำคุณไปยังตำแหน่งที่กำหนดโดยสมมติว่าไฟล์อยู่ในโฟลเดอร์โครงการที่คุณกำหนด
ไม่มีรหัสหรือฟังก์ชันที่จะทำสิ่งนี้
ฉันคิดว่าตามที่ "อธิบาย" คุณหมายถึง "กำหนด" สำหรับสิ่งนี้คุณจำเป็นต้องมี IDE ที่ดีที่สามารถทำได้
นี่คือฟังก์ชั่นพื้นฐานที่จะสแกนไฟล์โครงการทั้งหมดของคุณเพื่อหาสตริงที่เฉพาะเจาะจงและบอกคุณว่าไฟล์นั้นอยู่ในไฟล์ใดและตำแหน่งถ่านเริ่มต้นที่โดยใช้ php พื้นฐานเท่านั้น หวังว่านี่จะช่วยใครสักคน ...
<?php
$find="somefunction()";
echo findString('./ProjectFolderOrPath/',$find);
function findString($path,$find){
$return='';
ob_start();
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(is_dir($path.'/'.$file)){
$sub=findString($path.'/'.$file,$find);
if(isset($sub)){
echo $sub.PHP_EOL;
}
}else{
$ext=substr(strtolower($file),-3);
if($ext=='php'){
$filesource=file_get_contents($path.'/'.$file);
$pos = strpos($filesource, $find);
if ($pos === false) {
continue;
} else {
echo "The string '$find' was found in the file '$path/$file and exists at position $pos<br />";
}
}else{
continue;
}
}
}
}
closedir($handle);
}
$return = ob_get_contents();
ob_end_clean();
return $return;
}
?>
อีกวิธีหนึ่งในการตรวจสอบว่าฟังก์ชันกำหนดไว้ที่ใดพยายามกำหนดฟังก์ชันใหม่ระบบข้อผิดพลาด PHP จะส่งคืนข้อผิดพลาดที่บอกคุณว่าฟังก์ชันกำหนดไว้ก่อนหน้านี้
ฉันชอบวิธีแก้ปัญหาของ Tom ดังนั้นฉันคิดว่าฉันสามารถแบ่งปันเคล็ดลับอีกเล็กน้อยกับReflectionFunction (ควรใช้ได้กับทุก PHP 5):
ซับเดียวเพื่อพิมพ์ชื่อไฟล์:
print (new ReflectionFunction("foo"))->getFileName();
โปรดทราบว่าจะไม่แสดงตำแหน่งของฟังก์ชันภายใน (เช่น_ ) แต่ยังคงสามารถพิมพ์ API ได้ดังต่อไปนี้
เพื่อพิมพ์คำจำกัดความและพารามิเตอร์ของฟังก์ชัน:
print new ReflectionFunction("foo");
ตัวอย่าง:
$ php -r 'print new ReflectionFunction("_");'
Function [ <internal:gettext> function _ ] {
- Parameters [1] {
Parameter #0 [ <required> $msgid ]
}
}
คุณจะต้องมี IDE ที่รองรับฟังก์ชัน "Open Function Declaration" สิ่งที่ดีสำหรับ php คือ Eclipse PDT
หากต้องการค้นหานิยามของฟังก์ชันให้เน้นชื่อฟังก์ชันกด CTRL + คลิกที่ชื่อ
$reflFunc->isInternal() === TRUE
หมายถึง -> getFileName () และ -> getStartLine () จะส่งคืน FALSE