DEV Community

Barış Bideratan
Barış Bideratan

Posted on

PHP'de Metotlar Arası Takip: Hangi Metottan Geldim?

Herkese selamlar! 👋

PHP projelerimizde bazen bir metottan başka bir metodu çağırırken, çağrıyı yapan metodu öğrenmek isteyebiliriz. "Ama neden?" diye sorabilirsiniz. Gelin önce böyle bir duruma neden ihtiyaç duyabileceğimizden bahsedelim.

Neden Hangi Metottan Geldiğini Bilmek İsteyelim?

Diyelim ki bir web uygulaması geliştiriyorsunuz ve birden fazla metot, aynı işlevi yerine getiren ortak bir metodu çağırıyor. Ancak bu ortak metodun davranışını, çağıran metoda göre farklılaştırmak istiyorsunuz. Mesela bir loglama işlemi yapacaksınız ve hangi metottan çağrıldığını bilmek, loglarınıza anlam katacak. Ancak, ek parametreler göndermek istemiyorsunuz; kodunuz sade ve temiz kalsın istiyorsunuz.

İşte tam bu noktada PHP'nin güçlü araçlarından biri olan debug_backtrace yardımımıza koşuyor.

Gerçek Bir Örnek Üzerinden Anlatım

Haydi bir senaryo üzerinden bu işi nasıl yapabileceğimizi görelim. Elimizde şöyle bir Laravel controller'ı olsun:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ExampleController extends Controller
{
    public function a()
    {
        return $this->c();
    }

    public function b()
    {
        return $this->c();
    }

    public function c()
    {
        // Çağrının geldiği metodu tespit et
        $trace = debug_backtrace();
        $caller = $trace[1]['function']; // Bir önceki çağrıyı al

        return response()->json([
            'called_from' => $caller,
        ]);
    }
}
Enter fullscreen mode Exit fullscreen mode

Kodun Açıklaması

  • a() ve b() metotları, ortak olan c() metodunu çağırıyor.
  • c() metodunda debug_backtrace() fonksiyonunu kullanıyoruz.
  • debug_backtrace()[1] ile bir önceki çağrının detaylarını alıyoruz.
  • ['function'] anahtarı, çağrıyı yapan metot adını döndürüyor.

Çalışma Sonucu

Eğer tarayıcıda a() metodunu çağırırsanız:

{
  "called_from": "a"
}
Enter fullscreen mode Exit fullscreen mode

b() metodunu çağırırsanız:

{
  "called_from": "b"
}
Enter fullscreen mode Exit fullscreen mode

Bu kadar basit ve etkili! 👌

Nerelerde Kullanabiliriz?

  • Loglama: Çağrıyı hangi metottan yaptığınızı bilmek, loglarınızı anlamlı hale getirebilir.
  • Dinamik Davranışlar: Aynı metodu farklı davranışlar sergilemesi için özelleştirmek istediğinizde, çağıran metodu bilmek işinizi kolaylaştırır.
  • Hata Ayıklama: Uygulama içinde metotların çağrı yığınını görmek, hataları daha hızlı çözmenizi sağlar.

Dikkat Edilmesi Gerekenler

debug_backtrace her ne kadar güçlü bir araç olsa da, bazı durumlarda performans üzerinde etkisi olabilir. Çok sık çağrılan metotlarda kullanıyorsanız dikkatli olun. Ayrıca, bu yöntemi yalnızca gerçekten gerekli olduğunda tercih edin. Aksi halde kodunuz gereksiz karmaşık hale gelebilir.

Sonuç

Metotlar arası takip yapmak gerektiğinde, debug_backtrace tam bir hayat kurtarıcıdır. Ekstra parametrelerle kodu şişirmeden, temiz ve sade bir şekilde çözüm sunar.

Umarım bu yazı sizin için faydalı olmuştur! Eklemek istedikleriniz varsa, yorumlarda buluşalım. 😊

🚀

Your next step

Do your career a favor. Join DEV.

It takes one minute and is worth it for your career.

Get started

Top comments (0)

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay