Frage

Gibt es eine Möglichkeit, die CLIP-Funktion mit etwas anderem als debug_backtrace () zu bekommen?

Ich bin auf der Suche nach einer weniger gierigen Weise zu simulieren Bereichen wie Freund oder interne .

Lassen Sie uns sagen, ich habe eine Klasse A und Klasse B.

Bisher Ich habe mit debug_backtrace(), die zu gierig ist (IMHO).

Ich dachte an etwas wie folgt aus:

<?php

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

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

Es könnte in Ordnung sein, wenn Sie es auf eine bestimmte Klasse begrenzen wollen, aber lassen Sie uns sagen, dass ich 300 Klassen haben, und ich möchte es 25 von ihnen begrenzen?

Eine Möglichkeit könnte eine Schnittstelle zum Aggregate werden:

public function __construct(CallerInterface $callerObj)

Aber es ist immer noch ein hässlich Code .

Darüber hinaus Sie kann nicht Verwendung dieser Trick mit statisch Klassen.

Haben Sie jede mögliche bessere Idee?

War es hilfreich?

Lösung

Sie können debug_backtrace(FALSE) nennen, die dann nicht den Objektindex auffüllen. Dadurch wird es schneller, ein wenig, aber im Allgemeinen, debug_backtrace ist in der Produktion Code zu vermeiden, es sei denn, Ihre App-Software-Tool ist, wo die Geschwindigkeit kein Thema ist, oder wenn es für die Fehlerbehandlung verwendet wird.

Von dem, was ich verstehe, Sie wollen

  • hat einen impliziten Verweis auf die Anrufer in den Angerufenen und
  • Zugriff von außen auf private und geschützte Objekte zum ausgewählten Klassen.

Beide existiert nicht in PHP ( und bricht Verkapselung imho ). Für eine Diskussion finden Sie unter

Andere Tipps

PHP nicht wirklich bietet Ihnen eine elegante Art und Weise des Umgangs mit diesem. Ohne an eine Sprache Flamewar zu beginnen, werde ich vorsichtig darauf, dass Sie Ihre gestalterischen Fähigkeiten und Bedürfnisse haben wahrscheinlich die Grenzen des Werkzeugs überschritten. PHP ist eine leichte Skriptsprache das ist eine Menge von pseudo-OOP hatte Merkmale auf sie geschraubt, aber in seinem Kern war es nicht immer für elegante Unternehmensarchitektur entworfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top