PHP nasıl callee alabilirim?

3 Cevap php

Possible Duplicate:
Caller function in PHP 5?

Ben global bir işlev veya kamu yöntemi denir ediliyor yerden bilmek istiyorum. Ben debug_backtrace inceleyerek bunu sanırım ama eğer varsa ben oldukça lighterweight mekanizmasını kullanmak istiyorum. Herhangi bir öneriniz?

Böylece gibi örnek bir şey için, varolan get_callee () fonksiyonu ve sabit hayal ise:

function doSomething() {
     if(get_callee() == 'PHP_GLOBAL') { throw new IllegalAccessException(); }
     ...
}

3 Cevap

Edit: Sorry, saw your note about debug_backtrace() now.

Yapmanız gereken eğer biraz çirkin ama hey, bu yanlış bir şey.

Sihirli get_callee () fonksiyonu ve debug_backtrace () bulunmaktadır. Ve evet, bu kullanmanız gerekir olmadığını kontrol bazı hata ekleyin.

<?php

init();

function foo()
{
 echo 'bar called from ' . get_callee() . '<br />';
 bar();
}

function bar()
{
 echo 'foo called from ' . get_callee() . '<br />';
}

function init()
{
 echo 'init .. <br />';
 foo();
}

function get_callee()
{
 $backtrace = debug_backtrace();
 return $backtrace[1]['function'];
}

Outputs:

init ..

foo adlandırılan bar

bar aradı foo

Neden sadece OO kullanmak ve yöntem / fonksiyon Özel beyan Yüklü?

Tüm kod üzerinde olanlar get_callee () yağmurlama başlarsanız, korkunç bir kludge yaratıyor.

Xdebug bazı güzel işlevleri sağlar.

<?php
  Class MyClass
  {
    function __construct(){
        $this->callee();
    }
    function callee() {
        echo sprintf("callee() called @ %s: %s from %s::%s",
            xdebug_call_file(),
            xdebug_call_line(),
            xdebug_call_class(),
            xdebug_call_function()
        );
    }
  }
  $rollDebug = new MyClass();
?>

iz dönecektir

callee() called @ /var/www/xd.php: 16 from MyClass::__construct

Ubuntu üzerinde Xdebug yüklemek için en iyi yoldur

sudo aptitude install php5-xdebug

Önce php5-dev yüklemeniz gerekebilir

sudo aptitude install php5-dev

more info