php - son - ¿Cómo accedo a miembro estático de una clase?
qué son los atributos de clase estáticos (5)
Estoy intentando acceder al miembro estático de una clase.
mi clase es:
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;
Recibo un error al imprimir. ¿Cómo puedo imprimir ''A es mi nombre''
Desde dentro de una clase y quiere acceder a un miembro de datos estáticos propio, también puede usar static :: en lugar de self ::
Encuentro la siguiente solución simple pero no sé si es buena o no.
Mi soln es:
eval(''return ''.$x[0].''::$strName;'');
Si A
es una clase, puede acceder a ella directamente a través de A::$strName
.
class A {
public static $strName = ''A is my name'';
}
echo A::$strName; // outputs "A is my name"
Actualizar:
Dependiendo de lo que tenga dentro de su matriz, si lo que me gusta definir como objetos de clase o literales de clase podría ser un factor. Yo distingo estos dos términos por,
$objClasses = array(new A(), new B()); // class objects
$myClasses = array(''A'',''B''); // class literals
Si usa el enfoque de literales de clase, entonces, usando un bucle foreach
con PHP5.2.8 se me da un error de sintaxis cuando uso el operador de resolución de alcance .
foreach ($myClasses as $class) {
echo $class::$strName;
//syntax error, unexpected ''::'', expecting '','' or '';''
}
Entonces pensé en usar el enfoque de objetos de clase, pero la única forma en que podía generar la variable estática era con una instancia de un objeto y usando la palabra clave self
como tal,
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;
}
}
Y luego invocar ese método al iterar,
foreach($objClasses as $obj) {
echo $obj->getStatic();
}
Que en ese punto, ¿por qué declarar la variable static
en absoluto? Derrota la idea de acceder a una variable sin la necesidad de crear una instancia de un objeto.
En resumen, una vez que tengamos más información sobre lo que le gustaría hacer, podemos continuar y brindar mejores respuestas.
Si desea una versión funcional para PHP5.2, puede usar reflection para acceder a la propiedad estática de una clase.
class A {
static $strName= ''123'';
}
$lstClass = array(''A'');
foreach ($lstClass as $value) {
$c = new ReflectionClass($value);
echo $c->getStaticPropertyValue(''strName'');
}
Demostración: http://ideone.com/HFJCW
Usted tiene un error de sintaxis con un punto y coma faltante y porque es una matriz que necesita para acceder al índice de 0, o bien estaría intentando llamar a la clase ''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;
Debería arreglarlo.
ACTUALIZAR
Si desea iterar sobre una matriz para llamar a una variable de clase:
$x = array(''A'', ''B'');
foreach ($x as $class) {
echo $class::$strName;
}
No estoy seguro de por qué querrías eso, pero ahí tienes. Y esto ha sido probado, no se lanzaron errores, la respuesta válida de A is my name
fue recibido.
EDITAR
Aparentemente esto solo funciona bajo PHP 5.3