PHP: Arkadaşım sınıfları ve ungreedy Arayan fonksiyon / sınıf

2 Cevap php

Debug_backtrace daha başka bir şey ile arayan işlevi almak () için herhangi bir yolu var mı?

I friend veya internal gibi kapsamları taklit etmek daha az açgözlü yol arıyorum.

Diyelim ki bir sınıf A ve sınıf B var diyelim

Şimdiye kadar, (IMHO) çok açgözlü olan debug_backtrace() kullanarak oldum.

Ben böyle bir şey düşündüm:

<?php

    class A
    {
        public function __construct(B $callerObj) {}
    }

    class B
    {
        public function someMethod()
        {
            $obj = new A($this);
        }
    }
?>

Size belirli bir sınıfa sınırlamak istiyorsanız Tamam olabilir, ama Diyelim ki 300 sınıfları var ve ben bunlardan 25 ile sınırlamak istiyorum diyelim belki?

Bir yolu toplamak için bir arayüz kullanıyor olabilir:

public function __construct(CallerInterface $callerObj)

Ama yine de bir ugly code bulunuyor.

Ayrıca, can't static sınıfları ile bu hile kullanmak.

Herhangi bir fikrin var mı?

2 Cevap

Daha sonra nesne dizini doldurmak değil, hangi debug_backtrace(FALSE) arayabilirsiniz. Bu biraz o kadar hızlı olacaktır, ancak app hız hata işleme için kullanıyorsanız bir sorun ya da zaman değil, yazılım aracıdır sürece genellikle debug_backtrace, üretim kodunda kaçınılmalıdır.

Kimden ne anlıyorum, istediğiniz

  • Aranan mevcut arayana örtülü bir başvuru var ve
  • seçilen sınıflara özel ve korumalı özellikleri dışında erişim.

Her ikisi de mevcut PHP (and breaks encapsulation imho). Etmez Bir tartışma için, bakınız

PHP gerçekten bu işleme şık bir yol sağlamaz. Bir dil flamewar başlatmak için anlam olmadan, ben temkinli tasarım becerilerini ve ihtiyaçlarını muhtemelen aracının sınırlarını aştınız önermek için gidiyorum. PHP pseudo-OOP bir sürü bunun üzerine cıvatalı özellikleri vardı, ama özünde, her zamankinden şık kurumsal mimari için tasarlanmış değildi hafif bir betik dilidir.