Я всего лишь один раз в PHP-разработчик. Теперь, работая над устаревшим приложением, я натолкнулся на следующую проблему, которая кажется очень глупой. Но я не могу получить переменную класса $ someString для хранения правильного значения:
class MyClass{
var $someString;
function doSomething(){
//$this->setString(); //this is effectively not called here, but later in getIframe()
$this->buildIframe();
echo $this->someString; //actually, I need someString here, but it is empty
}
function setString(){
$this->someString = "something";
}
function buildIframe(){
$content .= <iframe....>;
}
function getIframe(){
$this->setString();
}
}
$myClassInstance = new MyClass();
$myClassInstance->doSomething();
$myClassInstance->getIframe();
Насколько я вижу, doSomething () вызывается в контексте класса, как я показал.
Что я делаю неправильно?
РЕДАКТИРОВАТЬ:
Я просмотрел код и думаю, что нашел причину этого. В вывод html встроен iframe, который создается в одной части и вызывается позже. Так что метод setString () на самом деле вызывается не сразу, как я думал сначала, а при вызове кода iframe. Вот почему это не доступно, где мне нужен вывод строки.
Я полагаю, что, как и сейчас, код не может быть получен в виде вывода $ someString, кроме как внутри метода getIframe ().
Этот код на 100% правильный и рабочий. Я проверил это на PHP 5. Это эхом «что-то» в строке. И это правильное поведение.
От руководство:
Примечание. Метод объявления переменной PHP 4 с ключевым словом var по-прежнему поддерживается в целях совместимости (в качестве синонима открытого ключевого слова). В PHP 5 до 5.1.3 его использование генерировало бы предупреждение E_STRICT.
Других решений пока нет …