Вызов константы класса в переменной другого класса - PullRequest
4 голосов
/ 25 сентября 2011

Мне было интересно, есть ли возможность в PHP сделать следующее:

<?php

class boo {
 static public $myVariable;

 public function __construct ($variable) {
   self::$myVariable = $variable;
 }
}

class foo {
  public $firstVar;
  public $secondVar;
  public $anotherClass;

 public function __construct($configArray) {
   $this->firstVar = $configArray['firstVal'];
   $this->secondVar= $configArray['secondVar'];
   $this->anotherClass= new boo($configArray['thirdVal']);
 }
}

$classFoo = new foo (array('firstVal'=>'1st Value', 'secondVar'=>'2nd Value', 'thirdVal'=>'Hello World',));

echo $classFoo->anotherClass::$myVariable;
?>

Ожидаемый ВЫХОД: Hello World

Я получаю следующую ошибку;Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

Я гуглил и это связано с двоеточием (двойными точками) в $classFoo->anotherClass::$myVariable

Я не хотел бы изо всех сил менять свойдругие классы.Есть ли какая-либо проблема вокруг этой проблемы?

Спасибо за вашу помощь заранее.

PS Я просто не хотел терять несколько часов на это, чтобы найти способвокруг.Вчера я уже потратил 2,5 часа, чтобы изменить почти весь Jquery, потому что клиент хотел изменения, и сегодня утром меня попросили вернуть изменения, потому что они не хотели его использовать (они передумали).Я просто сейчас пытаюсь избежать больших перемен.

Ответы [ 2 ]

11 голосов
/ 25 сентября 2011

Вам нужно сделать:

$anotherClass = $classFoo->anotherClass;
echo $anotherClass::$myVariable;

Расширение выражений для имен / объектов классов для статических вызовов / констант не поддерживается (но расширение переменных, как показано выше, есть).

0 голосов
/ 28 июня 2014

Если вам не нужны память и скорость выполнения, это правильно.
Кажется, что ссылка была бы лучше:

$classRef = &$classFoo->anotherClass;
echo $classRef;

У меня работает.

...