usar una son sirve qué que para metodos los llamar funcion estáticos estaticos estatica ejemplos cuando como clases clase atributos php class oop static member

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