Как получить доступ к статическому члену класса?

Я пытаюсь получить доступ к статическому члену класса.

мой класс:

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; 

Во время печати я получаю ошибку. Как я могу напечатать «A – мое имя»,

Если A – класс, вы можете получить к нему доступ непосредственно через A::$strName .

 class A { public static $strName = 'A is my name'; } echo A::$strName; // outputs "A is my name" 

Обновить:

В зависимости от того, что у вас есть внутри вашего массива, может быть фактором, который может быть тем, что мне нравится определять как объекты класса или литералы класса . Я различаю эти два термина,

 $objClasses = array(new A(), new B()); // class objects $myClasses = array('A','B'); // class literals 

Если вы подходите к классу литературных подходов, то используя цикл foreach с PHP5.2.8, я получаю синтаксическую ошибку при использовании оператора разрешения области .

 foreach ($myClasses as $class) { echo $class::$strName; //syntax error, unexpected '::', expecting ',' or ';' } 

Итак, я подумал об использовании подхода к объектам класса, но единственный способ, по которому я мог бы вывести статическую переменную, был с экземпляром объекта и с использованием ключевого слова self ,

 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; } } 

И затем вызовите этот метод при повторении,

 foreach($objClasses as $obj) { echo $obj->getStatic(); } 

Который в этот момент вообще объявляет переменную static ? Он побеждает всю идею доступа к переменной без необходимости создания экземпляра объекта.

Короче говоря, как только у нас будет больше информации о том, что вы хотели бы сделать, мы можем продолжить и предоставить более качественные ответы.

Если вам нужна рабочая версия для PHP5.2, вы можете использовать отражение для доступа к статическому свойству класса.

 class A { static $strName= '123'; } $lstClass = array('A'); foreach ($lstClass as $value) { $c = new ReflectionClass($value); echo $c->getStaticPropertyValue('strName'); } 

Демо: http://ideone.com/HFJCW

У вас есть синтаксическая ошибка с отсутствующей точкой с запятой, и поскольку это массив, вам нужно получить доступ к индексу 0, иначе он будет пытаться вызвать класс «Массив».

 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; 

Должен это исправить.

ОБНОВИТЬ

Если вы хотите перебрать массив, чтобы вызвать переменную класса:

 $x = array('A', 'B'); foreach ($x as $class) { echo $class::$strName; } 

Не знаете, зачем вам это нужно, но там вы идете. И это было проверено, никаких ошибок не было, действительный ответ A is my name получил A is my name .

РЕДАКТИРОВАТЬ

По-видимому, это работает только в PHP 5.3

Я нахожу следующее одно простое решение, но не знаю, является его хорошим или нет.

Мой soln:

 eval('return '.$x[0].'::$strName;'); 

Изнутри класса и хотите получить доступ к статическому собственному члену данных, вы также можете использовать static :: вместо self ::