Domanda

Sto cercando un modo per eseguire in modo trasparente il codice quando una classe è definita - cosa ancora più importante, quando la classe è estesa.

Per esempio, se ho:

class A
{  function define()
   {  echo "A has been defined!\n";
   }
   __magicDefine
   {  define();
   }
}

class B extends A
{
}

mi piacerebbe che per la stampa "A è stato definito! \ N". È questo possibile?

È stato utile?

Soluzione

Questo sarebbe impossibile, sì. Nulla viene chiamato definizione della classe.

Questo concetto è anche una sorta di aggressivo supportato; provare a scrivere

class foo {
    static function __construct() {
        echo "hi!";
    }
}

e si otterrà Fatal error: Constructor blah::__construct() cannot be static.

Altri suggerimenti

Credo che quello che stai cercando di fare è tenere traccia degli oggetti che sono in esecuzione? Non esattamente sicuro di cosa il vostro obiettivo finale è qui.

Forse stai cercando il ReflectionClass in fase di esecuzione? È possibile determinare se una classe esiste e ciò che la classe estesa è.

E 'suona anche come quello che si sta puntando è una fabbrica di oggetto che tiene traccia degli oggetti che vengono utilizzati. Look up single, in fabbrica, e le funzioni membro statiche / variabili concetti per quelli.

Per quanto riguarda questo:

class A 
{ 
 public function __construct()
 { print "A has been called";
 } 
}

Se la classe B sovrascrive il costruttore, non sta andando a chiamare il costruttore di A. Es:

class B extends A
{
 public function __construct()
 { print "B has been called";
   // parent::__construct(); /// would print out A has been called
 }
}

Tuttavia, in codice, è possibile verificare se B è un'istanza di A uno dei tanti modi:

function doSomethingWithA(A $a)....

function doSmoethingWithA($a)
{
 if($a instanceof A)
 {
  // blah
 }
}

Non so se questo aiuta molto.

In Java, questo è è possibile, utilizzando un "agente Java", che registra un java.lang.instrument.ClassFileTransformer con la JVM.

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