2012-01-02 2 views
1

J'ai une classe statique avec un nom très long, par exemple:PHP La classe statique a un nom très long - puis-je utiliser un pointeur plus court?

class SomeClassWithAVeryLongName { 
    const CONST_ONE = 'foo'; 
    const CONST_TWO = 'bar'; 
} 

Dans mon autre classe, je veux faire référence à ces constantes. Le problème est qu'il ya un tas d'entre eux et je les utilise comme des touches associatives afin mon code devient très bavard:

$someArray[SomeClassWithAVeryLongName::CONST_ONE][SomeClassWithAVeryLongName::CONST_TWO] = 'foobar'; 

Est-il possible que je peux utiliser un pointeur de quelque sorte? Quelque chose comme:

// Pseudo code 
$scwavln = 'SomeClassWithAVeryLongName'; 
$someArray[$scwavln::CONST_ONE][$scwavln::CONST_TWO] = 'foobar'; 

Cela ne semble pas fonctionner pour moi. Je suis sur PHP 5.2.6.

+0

code est beaucoup lu plus souvent que par écrit . Par conséquent, vous devriez essayer d'écrire du code lisible. '$ scwavln' n'est pas lisible, alors ne le faites pas. – Gordon

+1

Silly, c'était juste un exemple. Le nom de classe réel est 'Facebook_Open_Graph_API' et je veux utiliser' FBAPI' – Maverick

Répondre

1
class scwavln extends SomeClassWithAVeryLongName {} 
$someArray[scwavln::CONST_ONE][scwavln::CONST_TWO] = 'foobar'; 
1

Eh bien, pour le problème spécifique, il suffit d'affecter les valeurs constantes à une variable plus courte et l'utiliser comme clé d'index.

$index1 = SomeClassWithAVeryLongName::CONST_ONE; 
$index2 = SomeClassWithAVeryLongName::CONST_TWO; 

$someArray[$index1][$index2] = 'foo'; 

Cependant, vous pouvez faire ce que vous essayez de faire avec PHP 5.3:

$Uri = '\\My\\Namespaced\\Class'; 

// you see the value of the const 
var_dump($Uri::MY_CONST); 
1
class SomeClassWithAVeryLongName { 
    const CONST_ONE = 'foo'; 
    const CONST_TWO = 'bar'; 
} 


$rfl = new ReflectionClass("SomeClassWithAVeryLongName"); 

$props = $rfl->getConstants(); 

print_r($props); 

Array 
(
    [CONST_ONE] => foo 
    [CONST_TWO] => bar 
) 

http://php.net/manual/en/class.reflectionclass.php

Questions connexes