J'essaie d'accéder à un membre statique d'une classe.
ma classe est:
class A
{
public static $strName = 'A is my name'
public function xyz()
{
..
}
..
}
//Since I have bunch of classes stored in an array
$x = array('A');
echo $x::$strName;
Je reçois une erreur lors de l'impression. Comment puis-je imprimer 'A est mon nom'
Si A
est une classe, vous pouvez y accéder directement via A::$strName
.
class A {
public static $strName = 'A is my name';
}
echo A::$strName; // outputs "A is my name"
Selon ce que vous avez dans votre tableau, si ce que j'aime définir en tant qu'objets class ou en littéraux class peut être un facteur déterminant. Je distingue ces deux termes par,
$objClasses = array(new A(), new B()); // class objects
$myClasses = array('A','B'); // class literals
Si vous choisissez l'approche des littéraux de classe, utilisez une boucle foreach
avec PHP 5.28. Une erreur de syntaxe est générée lorsque vous utilisez l'opérateur de résolution scope .
foreach ($myClasses as $class) {
echo $class::$strName;
//syntax error, unexpected '::', expecting ',' or ';'
}
Alors, j'ai pensé à utiliser l'approche des objets de classe, mais la seule façon de sortir la variable statique était d'utiliser une instance d'objet et d'utiliser le mot clé self
comme suit:
class A {
public static $strName = 'A is my name';
function getStatic() {
return self::$strName;
}
}
class B {
public static $strName = 'B is my name';
function getStatic() {
return self::$strName;
}
}
Et puis invoquer cette méthode lors d'une itération,
foreach($objClasses as $obj) {
echo $obj->getStatic();
}
Pourquoi à ce moment-là déclarer la variable static
? Cela élimine toute l'idée d'accéder à une variable sans avoir besoin d'instancier un objet.
En bref, une fois que nous avons plus d’informations sur ce que vous souhaitez faire, nous pouvons continuer et fournir de meilleures réponses.
Si vous voulez une version de travail pour PHP 5.2, vous pouvez utiliser reflection pour accéder à la propriété statique d'une classe.
class A {
static $strName= '123';
}
$lstClass = array('A');
foreach ($lstClass as $value) {
$c = new ReflectionClass($value);
echo $c->getStaticPropertyValue('strName');
}
Démo: http://ideone.com/HFJCW
Vous avez une erreur de syntaxe avec un point-virgule manquant et, comme il s'agit d'un tableau, vous devez accéder à l'index 0, sinon ce serait essayer d'appeler la classe 'Array'.
class A
{
public static $strName = 'A is my name';
public function xyz()
{
// left blank and removed syntax error
}
}
$x = array('A');
echo $x[0]::$strName;
Devrait le réparer.
METTRE À JOUR
Si vous voulez parcourir un tableau pour appeler une variable de classe:
$x = array('A', 'B');
foreach ($x as $class) {
echo $class::$strName;
}
Vous ne savez pas pourquoi vous voulez cela, mais voilà. Et cela a été testé, aucune erreur n'a été générée, une réponse valide de A is my name
a été reçue.
MODIFIER
Apparemment, cela ne fonctionne que sous PHP 5.3
À l'intérieur d'une classe et souhaitez accéder à un membre de données statique, vous pouvez également utiliser static :: Au lieu de self ::
Je trouve ensuite une solution simple, mais je ne sais pas si elle est bonne ou non.
Mon sol est:
eval('return '.$x[0].'::$strName;');