পিএইচপি-তে কোনও ফাংশনের ভিতরে আমি কীভাবে ফাংশনটির নাম পাই?


235

এটা কি সম্ভব?

function test()
{
  echo "function name is test";
}

1
কৌতুহলের বাইরে, কখন এর দরকার আছে? আপনি যে ফাংশনটির নাম জানেন না তা তৈরি করা কি সম্ভব?
অসন্তুষ্ট গোট

37
একটি সম্ভাব্য ব্যবহার হ'ল আপনার এক্সিকিউশনটি লগ করা। আপনি যদি "আমার একটি ত্রুটি ছিল" লিখছেন। একটি লগফিল বা কিছুতে ফাংশন । এইভাবে, যদি ফাংশনটির নাম পরিবর্তন করা হয় তবে আপনাকে লগ বার্তাটি পরিবর্তন করতে মনে রাখে এমন ব্যক্তির সম্পর্কে চিন্তা করতে হবে না।
ব্রায়ান র্যামসে

1
লগিংয়ের জন্য এটি প্রয়োজন! জিজ্ঞাসা করার জন্য ধন্যবাদ :)
সাব্লাইমারিক

2
এছাড়াও যদি আপনি ফাংশনের ভিতরে ফাংশনটির নামটি ব্যবহার করতে চান (অন্য ব্যবহারের জন্য) তবে দরকারী। ভালো লেগেছে ফাংশন, ইত্যাদি উপর ভিত্তি করে লিংক গঠন করা (যেমন: function name1()তারপর ব্যবহার NAME1 আবার ভিতরে), সময় প্রচুর বাঁচাতে হবে যদি আপনি ফাংশন প্রচুর জন্য একই টেমপ্লেট আছে।
মাফিয়া

1
@ ডিসগ্রান্টলডগোট: আপনি যদি ম্যানুয়ালি ফাংশন তৈরি করেন এবং প্রতিটি ফাংশনের জন্য ত্রুটি বার্তা সম্পাদনা করতে না চান তবে এটি কার্যকর। এটিকে ত্রুটি বার্তায় যুক্ত করার অর্থ আপনার কম কাজ রয়েছে।
জন বো

উত্তর:


390

সঠিক __FUNCTION__ উপায়টি হচ্ছে পূর্বনির্ধারিত যাদু ধ্রুবকটি ব্যবহার করা ।

উদাহরণ:

class Test {
    function MethodA(){
        echo __FUNCTION__;
    }
}

ফলাফল: MethodA


6
ফাংশন অ-শ্রেণীর ফাংশনগুলির জন্যও কাজ করে। পিএইচপি 7.0.8 এ চেষ্টা করা হয়েছে।
এমভিসাগর

একইভাবে, ক্লাসের নাম কীভাবে পাবেন?
কিরণ রেড্ডি

2
@KiranReddy খুব যে জন্য একটি যাদু ধ্রুবক আছে: __CLASS__। অথবা আপনি করতে পারেন get_class($this)
শীন শিম

1
PHP> = 4
নবি KAZ

98

আপনি ম্যাজিক ধ্রুবকগুলি __METHOD__ (শ্রেণীর নাম অন্তর্ভুক্ত) বা __FUNCTION__(কেবলমাত্র ফাংশনের নাম) এটি কোনও পদ্ধতি বা কোনও ফাংশন কিনা তার উপর নির্ভর করে ব্যবহার করতে পারেন ... =)


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

3
সেটা সত্য. তবে প্রায়শই মেথ ক্লাস :: মেথনামের পরিবর্তে মেথনাম পাওয়ার পক্ষে দরকারী।
প্যাট্রিক অকেস্ট্রান্ড

16

আপনি যদি পিএইচপি 5 ব্যবহার করে থাকেন তবে আপনি এটি চেষ্টা করতে পারেন:

function a() {
    $trace = debug_backtrace();
    echo $trace[0]["function"];
}

14
এটি অবিশ্বাস্য সংস্থান নিবিড়। ফাংশন বা মেথোড ব্যবহার করা আরও বেশি দক্ষ। ডিবাগ_ব্যাকট্রেস () দুর্দান্ত তবে যদি আপনার কেবলমাত্র ফাংশনটির নামের চেয়ে বেশি প্রয়োজন হয়।
লুক কাজিন্স

2
এটা এই উদ্দেশ্যে ব্যবহার debug_backtrace () করার জন্য একটি খারাপ অভ্যাস
Marcio Mazzucato

1
এই আমি খুঁজে পেয়েছি শুধুমাত্র সঠিক উপায় !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!! !!!!!!!!!!!!!! কারণ __FUNCTION__পিতামাতার ফাংশনটির নাম দেয় (যখন বর্তমান ফাংশনটি প্যারেন্ট ফাংশনে অন্তর্ভুক্ত থাকে)
টি.টিডুয়া

5
@ টাজো টুডুয়া আপনি কি একটি উদাহরণ দিতে পারেন?
alds

2
<?php

  class Test {
     function MethodA(){
         echo __FUNCTION__ ;
     }
 }
 $test = new Test;
 echo $test->MethodA();
?>

ফলাফল: "পদ্ধতি";


যদিও এই কোড স্নিপেট একটি সমাধান সহ সমাধান হতে পারে, সত্যিই আপনার পোস্টের গুণমান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
সিলভারনাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.