Domanda

C'è un modo per ottenere la funzione chiamante con qualcosa di diverso da debug_backtrace ()?

Sto cercando un modo meno avido di simulare ambiti come amico o interno .

Diciamo che ho una classe A e di classe B.

Fino ad ora, ho usato debug_backtrace(), che è troppo avido (IMHO).

ho pensato a qualcosa di simile:

<?php

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

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

Potrebbe essere OK se si vuole limitare a una classe specifica, ma diciamo che ho 300 classi, e voglio limitare a 25 di loro?

Un modo potrebbe essere utilizzando un'interfaccia per aggregare:

public function __construct(CallerInterface $callerObj)

Ma è ancora un brutta codice .

Inoltre, è non possono usare quel trucco con statiche le classi.

ha qualche idea migliore?

È stato utile?

Soluzione

È possibile chiamare debug_backtrace(FALSE), che non sarà poi popolare l'indice oggetto. Ciò accelerarlo un po ', ma in generale, debug_backtrace è da evitare nel codice di produzione, a meno che la vostra applicazione è strumento software in cui la velocità non è un problema o quando lo si utilizza per la gestione degli errori.

Da quello che ho capito, vuoi

  • avere un implicito riferimento al chiamante disponibile nel callee e
  • accesso esterno alle proprietà private e protette per le classi selezionate.

Entrambi non esiste in PHP ( e si rompe l'incapsulamento imho ). Per una discussione, si veda

Altri suggerimenti

PHP in realtà non fornisce un modo elegante di gestire questo. Senza volerlo avviare un flamewar lingua, ho intenzione di suggerire cautela che le vostre abilità e le esigenze di progettazione hanno probabilmente superato i limiti del vostro strumento. PHP è un linguaggio di scripting leggero che ha avuto un sacco di pseudo-OOP caratteristiche imbullonato su di esso, ma al suo interno, non è stato mai progettato per l'elegante architettura aziendale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top