2013-10-08 5 views
2

У меня есть сценарий на сервере с php версии 4. Теперь он изменен на php5, и скрипт больше не работает. Я получаю эту ошибку:

Фатальная ошибка: Не удается повторно назначить $ это в URL database.php линии 88

В файле есть класс, который имеет функцию. Внутри линии 88:

$this = new $db($serv, $user, $pass, $dbName); 

Что означает ошибка и как ее изменить?

+0

Http: //us1.php. net/manual/en/language.oop5.basic.php Здесь есть объяснение $ this. – vascowhite

ответ

3

$this специальные «переменный», которая всегда относится к объекту текущая функция выполняется в Это имеет смысл только внутри функций, которые принадлежат к классу . однако вам не разрешается использовать его где-либо еще, и вы никогда не сможете его назначить. Решение просто переименовать переменную.

+0

Ну, я переименовал его в DBO, но это только дает мне новую ошибку: Фатальная ошибка: Вызов неопределенной функции: doquery() в URL QuizOperations.php на линии 524 Line 524 $ this-> db- > doQuery (.....); Существует несколько функций с подобными линиями. Если я изменю эти переменные на dbo, я получаю такое же сообщение об ошибке. – Atha

+0

@Atha: Это ваш собственный код или код, который вы получили из другого места? Это написано для PHP 4 или 5? В любом случае, источник проблемы немного сложно сказать только из этой строки, и поскольку это другая ошибка, вам, вероятно, лучше разместить ее как новый вопрос. –

0

Класс пытается переопределить себя ($ this в php - это то же, что и this в C#), и это невозможно. Вы должны изменить $this на что-то еще, и тогда ошибка должна исчезнуть.

0

$this является зарезервированным именем переменной и не может назначаться вручную.

0

$ этот является предопределенной переменной в PHP.

Вот ссылка в руководстве по PHP: Классы и объекты: Основы. В нем описывается, как внутри метода $ указывает на «этот объект», над которым работает. Тем не менее, он по-прежнему сохраняется вне метода.

Измените идентификатор на другое слово.

1

Вы можете переназначить $ это значение по переменной переменной

$name = 'this'; 
$$name = 'stack'; 
echo $this; 

// это приведет к стеку

0

Вы можете использовать refrences трюк:

$thisRef = &$this; 
$thisRef = new $db($serv, $user, $pass, $dbName);