class{ 
function a(){ 
$this->b(——FUNCTION——); 

function b($funName){ 
echo $funName;
//如何得到 方法a()的名称? 

}
试试行不行。

解决方案 »

  1.   

    __FUNCTION__ 魔术变量。 
      

  2.   

    反射好像可以。
    非要在一个类里吗?如果2和方法不在一个类里的话,
    可以用 带B函数的类 继承 带A函数的类,
    再在 带B函数的类 里重写 带A函数类里 的A函数。
      

  3.   

    to jlzan1314:主要不想转递参数
    to qianziai0912:反射不知道怎么用
    反射能无差别的回溯类方法和属性,
    如果反射结果知道 类方法有 class::a、class::b和class::c
    其中 class::a和class::b都 调用了 class::c
    那么当前在 class::c 中怎么知道 是class::a还是class::b调用的呢?另外用继承重写不知道怎么用
    class1{
    function a(){}
    }class2 extends class1
    {
    function a(){
    $this->b();//重写class1::a ?
    }function b(){
    //然后怎么得到方法a()的名称?
    }
    }====================================================
    如果 类方法有 class::a、class::b和class::c
    其中 class::a和class::b都 调用了 class::c
    那么当前 class::c 中如何知道 谁调用的?那么想 有个类方法 比如 class::x
    每次 class::c 中 执行class::x,就可以返回调用者名称class{function a(){
    self::c();
    }function b(){
    self::c();
    }function c(){
    self::x();
    }function x(){
    //return 调用者名称??
    }
    }
      

  4.   

    我查过资料。不太容易实现。目前PHP这方面的支持少得可怜,手册可鉴。@_@
      

  5.   

    呵呵,反射我也不是很明白继承的话,就应该是这个样子:
    2继承1的话,可以通过NEW关键字来调用1里面的任何方法和属性class1{
    function a(){}
    }class2 extends class1
    {
    $newa = new class1();
    $newa->a();
    }
      

  6.   

    <?php
    class test{
    function a(){
    $this->b();
    }
    function b(){
    $methods = get_class_methods($this);
    $total = count($methods);
    $i = 0;
    while($i<($total-1) && $methods[$i+1]!='b') {
    $i++;
    }
    echo 'The pre function is ' . $methods[$i];
    }
    }
    $T = new test;
    $T->b();
    ?>
      

  7.   

    具体还不很理qianziai0912 想法,那么所以,这样子可以得到函数名吗?
    panzhiqi :你的意思,把当前对象的所有方法名 和 当前方法名 比较,然后不是当前方法名的,就是结果,
    这个当然,第一个例子中是这样的,不过是想得到的是 “正在调用本函数,的上一级函数,的名称”
      

  8.   

    我有一个想法,不知道行不?
    Exception::getTrace方法可以得到堆栈跟踪信息
    所以可以通过new一个Exception对象,取得getTrace后,再去分析
      

  9.   

    http://cn.php.net/manual/en/function.debug-backtrace.php
      

  10.   

    看来不少朋友误会了。搞了一堆引用parent class's methods & instance variable 的代码。如果能得到某function的caller,程序会写得非常灵活。我先看下楼上给的URL。@_@
      

  11.   

    弓虽!277894613 和hu_zhenghui 都行,要没第三者就揭帖了class clas{ function a(){ 
    self::c(); 
    } function b(){ 
    self::c(); 
    } function c(){ 
     echo "调用我的函数为:".self::x(); 
    } function x(){ 
    echo "\n hu_zhenghui 方法:\n";
    $return=debug_backtrace();
    print_r($return);
    //return $return[2]['function']; try{
    throw new Exception();
    }catch (Exception $e) {
    echo "\n 277894613 方法:\n";
    $return=$e->getTrace();
    print_r($return);
    return $return[2]['function'];
    }


    //clas::a();
    clas::b();