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. 😊

🚀

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (0)

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay