【问题标题】:How do I get the function name inside a function in PHP?如何在 PHP 中的函数中获取函数名?
【发布时间】:2010-11-03 14:57:53
【问题描述】:

有可能吗?

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

【问题讨论】:

  • 只是出于好奇,什么时候需要这个?是否可以创建您不知道名称的函数?
  • 一种可能的用途是记录您的执行情况。如果你写的是 "I have an error in " 。 FUNCTION 到日志文件或其他东西。这样,如果函数名称发生更改,您不必担心人会记得更改日志消息。
  • 记录需要这个!谢谢你的提问:)
  • 如果你想在函数内部使用函数名(用于其他用途)也很有用。喜欢根据函数构建链接等(例如:function name1()然后在里面再次使用name1),如果你有很多函数的相同模板会节省很多时间。
  • @DisgruntledGoat:如果您手动创建函数并且不想为每个函数编辑错误消息,这很有用。将其添加到错误消息中意味着您的工作量会减少。

标签: php function


【解决方案1】:

准确的方法是使用__FUNCTION__predefined magic constant

例子:

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

结果:MethodA

【讨论】:

  • FUNCTION 也适用于非类函数。在 PHP 7.0.8 上试过。
  • 同理,如何获取类名?
  • @KiranReddy 这也有一个神奇的常数:__CLASS__。或者你可以get_class($this)
  • 在 PHP 上试过 >= 4
【解决方案2】:

您可以使用magic constants __METHOD__(包括类名)或__FUNCTION__(只是函数名),具体取决于它是方法还是函数... =)

【讨论】:

  • METHOD 包含类名,FUNCTION 就是这样。后者在类的方法中同样可用。
  • 确实如此。但是获取 MyClass::methodName 而不是 methodName 通常很有用。
  • METHOD 不一定返回类名;如果调用它的位置在特征内部,您将获得特征名称。如果要获取所用实例的类名,请使用get_class($this)
  • @Jonny:Traits 是在 2012 年的 PHP 5.4 中引入的。所以当这个答案在 2009 年编写时,它们并不是什么东西。请随时提出修改建议,以更新 PHP 如何使用的答案现在工作。
【解决方案3】:

如果你使用的是 PHP 5,你可以试试这个:

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

【讨论】:

  • 这是令人难以置信的资源密集型。使用 FUNCTIONMETHOD 效率更高。如果您需要的不仅仅是函数名,那么 debug_backtrace() 非常棒。
  • 为此目的使用 debug_backtrace() 是一种不好的做法
  • 这是我发现的唯一正确的方法 !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!因为__FUNCTION__返回父函数名(当当前函数包含在父函数中时)
  • @tazo todua。能举个例子吗?
【解决方案4】:
<?php

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

结果:“方法A”;

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 2013-04-01
  • 1970-01-01
  • 2011-01-10
  • 2018-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-01
相关资源
最近更新 更多