2013-02-02 19 views
5

ho bisogno di usare costante come nome di classe per accesso a questa proprietà statica della classe, che èuso costante come nome della classe

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

echo CLASSNAME::$name; 

questo restituisce l'errore, che la classe CLASSNAME non esiste. C'è qualche soluzione? pasticcio assoluto

+1

Buona domanda. Hmm. – Prash

+0

Forse se affermi ciò che vuoi realmente fare, potrebbero esserci alcuni modi alternativi migliori. Questo potrebbe essere un [XY Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

risposta

4

E 'possibile con la riflessione:

class a { 

    public static $name = "Jon"; 

} 

define("CLASSNAME", "a"); 

$obj = new ReflectionClass(CLASSNAME); 
echo $obj->getStaticPropertyValue("name"); 

Se si tratta di una buona scelta di design è un'altra questione ...

+0

sì, funziona. – ripa

0

L'uso di PHP di dereferenziazione:

$CLASSNAME = 'a'; 
$a::$name; 
0

che cercavo in questo problema perché la classe si basa su un certo contesto che deve essere dato. Così ho fatto una funzione nella mia classe che restituirà la classe si richiede in questo modo:

/** 
* Instantiate a class by class name in variable 
* 
* @param string $className The name of the class 
* @return mixed The instantiated class 
*/ 
protected function getClass($className) 
{ 
    return new $className; 
} 

Pertanto si può chiamare utilizzando $class = new $this->getClass(static::CLASSNAME); quando è stata definita una costante all'interno della classe corrente che contiene il nome della classe che si voglio istanziare. Nel tuo caso puoi usarlo senza lo 'static::' o con qualsiasi variabile tu desideri utilizzare. Non dimenticare di implementare la gestione degli errori.

Problemi correlati