কোথায় একটি ফাংশন সংজ্ঞায়িত করা যায়?


109

কোন ফাইল এবং লাইনে প্রদত্ত ফাংশনটি সংজ্ঞায়িত করা হয়েছিল তা আমি কীভাবে জানতে পারি?

উত্তর:


231

আপনি পিএইচপি নিজেই এটি করতে পারেন:

$reflFunc = new ReflectionFunction('function_name');
print $reflFunc->getFileName() . ':' . $reflFunc->getStartLine();

8
টিপ: $reflFunc->isInternal() === TRUEঅর্থ -> getFileName () এবং -> getStartLine () মিথ্যা ফিরিয়ে দেবে।
বব স্টেইন

এটি এখনও আমার পক্ষে ভাল কাজ করে। আমি যেখানে লক্ষ্য নির্ধারণ করা হচ্ছে তার পরিবর্তে ফাংশনটি কোথায় চালিত হচ্ছে তা লক্ষ্যবস্তু করতে চাই।
EHerman

2
@ এহারম্যান আমি মনে করি না আপনি প্রতিচ্ছবি সহ কোনও ফাংশনের কলার খুঁজে পাবেন। আপনি যদি এটি সম্ভবত এটির পক্ষে ভাল না কাজ করতে পারেন কারণ পিএইচপি ফাইলগুলি চাহিদার সাথে অন্তর্ভুক্ত থাকে এবং তাই আপনার সম্ভবত সমস্ত কোড লোড করা হয়নি যা ফাংশনটিকে কল করে।
টম হাই

11
শ্রেণীর পদ্ধতিগুলির জন্য আপনি ব্যবহার করতে পারেন$reflFunc = new ReflectionMethod($this, 'method_name');
লাডিস্লাভ গ্যালে

3
@EHerman আপনি ডিবাগ_ব্যাকট্রেস () অনুসন্ধান করতে পারেন যেখানে কোন ফাংশন বলা হচ্ছে তা সন্ধানের জন্য।
ডটভিজ

12

হয় এমন একটি আইডিই ব্যবহার করুন যা এটি করার অনুমতি দেয় (আমি এক্স্লিপস পিডিটি পুনরায় ফিরিয়ে আনব), অথবা আপনি লিনাক্সে, বা উইংরেপ ব্যবহার করে সর্বদা এটি গ্রেপ করতে পারেন। লিনাক্সে এটি এমন কিছু হবে:

grep -R "function funName" *

প্রকল্পের মূল ফোল্ডারের মধ্যে থেকে।


5
আরও ভাল: গ্রেপ -আর "ফাংশন f sfunName" *
ডেভিড

3

আপনি যদি নেটবিন্সের মতো আইডিই ব্যবহার করেন তবে আপনি ফাংশন ব্যবহারের জন্য CTRL + ক্লিক করতে পারেন এবং এটি আপনাকে যেখানে সংজ্ঞায়িত করা হয়েছে সেখানে নিয়ে যাবে, ধরে নিবেন যে ফাইলটি আপনি নির্ধারিত প্রকল্প ফোল্ডারের মধ্যে রয়েছে।

এটি করার জন্য কোনও কোড বা ফাংশন নেই।


জেন্ড স্টুডিওতে একই এবং আমি ধরে নিই এটি পরে গ্রহণের জন্য পিডিটি-র সাথেও কাজ করবে।
গর্ডন

@ গর্ডন "এর মতো একটি আইডিই" আমি মনে করি এটি কোনও আধুনিক
আইডিইয়ের

2

আমি ধরে নিয়েছি যে "বর্ণিত" দ্বারা আপনার অর্থ "সংজ্ঞায়িত"। এর জন্য, আপনার আদর্শভাবে একটি উপযুক্ত আইডিই দরকার যা এটি করতে পারে।


আমি অপ্টানা ব্যবহার করছি যা প্রকল্পের মাধ্যমে পাঠ্য অনুসন্ধান রয়েছে। তবে এটি ব্যবহার করার জন্য আমাকে প্রকল্প হিসাবে গর্ত (খুব বড়) সাইটটি আমদানি করতে হবে।
সল্টলেক

2

এখানে একটি বেসিক ফাংশন যা কোনও নির্দিষ্ট স্ট্রিংয়ের জন্য আপনার পুরো প্রকল্পের ফাইলগুলি স্ক্যান করে এবং আপনাকে জানায় যে এটি কোন ফাইলের মধ্যে রয়েছে এবং কোন বেসিক পজিশনটি কেবলমাত্র বেসিক পিএইচপি ব্যবহার করে এটি শুরু হয়। আশা করি এটি কাউকে সহায়তা করবে ...

<?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;
}
?>

2

ফাংশনটি কোথায় সংজ্ঞায়িত হয়েছে তা যাচাই করার আরেকটি উপায়, ফাংশনটিকে নতুন করে সংজ্ঞায়িত করার চেষ্টা করুন, পিএইচপি ত্রুটি সিস্টেমটি কেবল একটি ত্রুটি আপনাকে ফিরিয়ে দেবে যেখানে ফাংশনটি আগে সংজ্ঞায়িত করা হয়েছিল


1

আমি টমের সমাধান পছন্দ করি, তাই আমি ভেবেছিলাম যে আমি রিফ্লেকশন ফাংশনটির সাথে আরও কিছু কৌশল ভাগ করতে পারি (এটি প্রতিটি পিএইচপি 5 এ কাজ করা উচিত):

  • ফাইলের নাম মুদ্রণের জন্য এক-লাইনার:

    print (new ReflectionFunction("foo"))->getFileName();

দয়া করে নোট করুন যে এটি আপনাকে অভ্যন্তরীণ ফাংশনের (যেমন _ ) জন্য অবস্থানটি প্রদর্শন করবে না , তবে এটি নীচে হিসাবে এটির জন্য এপিআই মুদ্রণ করতে পারে।

  • ফাংশনটির সংজ্ঞা এবং পরামিতিগুলি মুদ্রণ করতে:

    print new ReflectionFunction("foo");

    উদাহরণ:

    $ php -r 'print new ReflectionFunction("_");'
    Function [ <internal:gettext> function _ ] {
      - Parameters [1] {
        Parameter #0 [ <required> $msgid ]
      }
    }

0

আপনার একটি আইডিই লাগবে যা "ওপেন ফাংশন ঘোষণা" কার্যকারিতা সমর্থন করে। পিএইচপি-র জন্য একটি ভাল হল এক্সিলিপ পিডিটি।

ফাংশন সংজ্ঞাটি সন্ধান করতে, ফাংশনের নামটি হাইলাইট করুন, সিটিআরএল ধরে রাখুন + নামটিতে ক্লিক করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.