2014-03-27 61 views
0

我想获取方法名。例如,A url调用method1,并拨打私人电话method2method2想知道谁调用此方法。我怎么能这样做。codeigniter从父方法获取方法名

我可以使用__FUNCTION__$this->router->methodmethod1,并把它作为method2参数。但是我想知道我可以在method2上得到这个方法吗从method1中调用?太感谢了。

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class ControllerName extends CI_Controller { 

    public function __construct() 
    { 
    parent::__construct(); 
    } 

    public function method1() 
    { 
     $this->_method2() 
    } 

    private function _method2() 
    { 
    // How to get call method name method1, 
    // Don't use parameter 
    // $who_call_me = 'method1'; 
    } 

} 

回答

1

您可以使用debug_backtrace()函数。我想它是唯一的方法来知道你不能使用参数。

$callers=debug_backtrace(); 
echo $callers[1]['function']; 

如果你只是想知道前面调用的方法,使用array_shift。打印这个结果可以看出U你的链接在一个阵列分成部分后,它会显示结果喜欢 -

$caller=array_shift($callers); 
echo "Called by {$caller['function']}"; 
+0

'$ callers'数组就像堆栈?例如'method1-> method2-> method3',数组应该是$ caller [1] ['function'] = method2,$ caller [2] ['function'] = method3 – lighter

+0

是的。它创建一个数组。或者如果你只是想知道以前的方法调用,你可以使用array_shift。我会在我的答案中编辑。 – sunny

+0

非常感谢! – lighter

0

这将取决于您的网址,但你可以做这样的事情..

function getNameOfOriginatingClass{ 
    $this->load->library('user_agent'); 
    $previous_url = $this->agent->referrer(); 
    $url_segments = explode('/',$previous_url); 
    echo '<pre>';print_r($url_segments);  
} 

..通常,$ url_segments [3]或$ url_segments [4]将包含您以前的函数名称,而前一个函数名称将包含以前的类名称,具体取决于您的url。

+0

但如果有人重写他的网址呢?我想它不是一个好主意,依靠你的代码的网址。 – sunny