php dinamik erişim sihirli sabitler

2 Cevap

Bu kısayol için bir yolu var mı:

function a($where){
  echo $where;
}

function b(){
  a(basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__);
}

böyle bir şey:

    define("__myLocation__", ''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.'');
    function a($where){
      echo $where;
    }

    function b(){
      a(__mYLocation_);
    }

I know that this cannot be done with constants (sadece bir teorik örnek), ama benim kod Shorthen için bir yol bulamıyorum. Bir hattımı almak için bir işlevi kullanırsanız o işlevi işlevi çağrıldı yerden çizgi değildir hat almak olacaktır.

Ben genellikle baskılar doğrudan günlük dosyasına, ama benim günlüğüne ben işlevi çağrıldı nereden bilmeniz gereken bir işlevi çağırmak, böylece i basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__ böyle bir şey basacaktır kullanın:

index.php::b()::6

Eğer farklı dosyalar üzerinde 500 fonksiyonlara sahip zaman kod bir çok şey var. Bunu yapmak için kısaltması veya daha iyi bir yolu var mı?

2 Cevap

Ben performans bulunanlar her kesmek oturum kendisine bir çağrı yapma ne olacağını bilmiyorum ancak debug_backtrace (), size yardımcı olacaktır. Bu deneyin:

function cut_log() {
    $trace = debug_backtrace();
    echo basename($trace[1]['file']) . '::' . $trace[1]['function']
         . '::' . $trace[1]['line'];
}

function a() {
    cut_log();
}

a();

Ehh .. Ben eval ve o sabiti ile bunu yapabilirim sanırım.

define("__myLocation__", "''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.''");
function a($where){
  echo $where;
}

function b(){
  a(eval(__myLocation__));
}

Ama gerçekten her şey için eval kullanarak olmamalıdır.