Pregunta

¿Hay alguna manera de obtener la función de llamadas con algo más que debug_backtrace ()?

Estoy buscando una manera menos codiciosos para simular ámbitos como amigo o interno .

Digamos que tengo una clase A y clase B.

Hasta ahora, he estado usando debug_backtrace(), que es demasiado codicioso (en mi humilde opinión).

pensé en algo como esto:

<?php

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

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

Podría estar bien si desea limitarlo a una clase específica, pero vamos a decir que tengo 300 clases, y quiero limitarlo a 25 de ellos?

Una forma podría ser el uso de una interfaz a agregada:

public function __construct(CallerInterface $callerObj)

Pero sigue siendo un código feo .

Además, no pueden uso ese truco con estática clases.

Tiene alguna idea mejor?

¿Fue útil?

Solución

Puede llamar debug_backtrace(FALSE), que luego no llenar el índice de objetos. Esto acelerarlo un poco, pero en general, debug_backtrace debe ser evitada en el código de producción, a menos que su aplicación es la herramienta de software donde la velocidad no es un problema o cuando se utiliza para el tratamiento de errores.

Por lo que entiendo, usted quiere

  • tiene una referencia implícita a la persona que llama está disponible en el destinatario de la llamada y
  • acceso desde el exterior a las propiedades privadas y protegidas para las clases seleccionadas.

Tanto no existe en PHP ( y se rompe la encapsulación en mi humilde opinión ). Para una discusión, véase

Otros consejos

PHP realmente no le proporcionan una manera elegante de manejar esto. Sin querer iniciar una flamewar idioma, voy a sugerir cautela que sus habilidades de diseño y necesidades probablemente han superado las limitaciones de su herramienta. PHP es un lenguaje de script ligero que ha tenido una gran cantidad de pseudo-POO características atornillada sobre ella, pero en su esencia, no se haya diseñado para la elegante arquitectura de la empresa.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top