Неожиданный T_PAAMAYIM_NEKUDOTAYIM, ожидающий T_NS_Separator

В выходные я переместил приложение с сервера Ubuntu 11.04 (Natty Narwhal) на сервер Red Hat Enterprise Linux (RHEL). Мой журнал ошибок заполнен ошибками PHP в строке темы, ссылающейся на следующую функцию:

function wfTalkHereArticleFromTitle( &$title, &$article ) { global $wgRequest, $wgTalkHereNamespaces; if (isset($title->noTalkHere)) return true; //Stop recursion $action = $wgRequest->getVal( 'action' ); $oldid = $wgRequest->getVal( 'oldid' ); $diff = $wgRequest->getVal( 'diff' ); if ($action == 'purge') $action = NULL; //"purge" is not considered an action in this context if ($action || $oldid || $diff) return true; $ns = $title->getNamespace(); if (!Namespace::isTalk($ns) && Namespace::canTalk($ns) && $title->exists() && ( !$wgTalkHereNamespaces || in_array($ns, $wgTalkHereNamespaces) ) ) { $tns = Namespace::getTalk($ns); $talk = Title::makeTitle($tns, $title->getDBKey()); if ($talk && $talk->userCan('read')) { $t = clone $title; $t->noTalkHere = true; //Stop recursion $a = MediaWiki::articleFromTitle( $t ); $article = new TalkHereArticle( $a, $talk ); } } return true; } 

Ошибка вызывается в

 If (!Namespace::isTalk($ns) 

заявление. Эта ошибка для меня новая. Как я могу это решить?

Я изменил код нарушения:

 if ( !Ns::isTalk($ns) && Ns::canTalk($ns) && $title->exists() && ( !$wgTalkHereNamespaces || in_array($ns, $wgTalkHereNamespaces) ) ) { $tns = Ns::getTalk($ns); $talk = Title::makeTitle($tns, $title->getDBKey()); if ($talk && $talk->userCan('read')) { $t = clone $title; $t->noTalkHere = true; //Stop recursion $a = MediaWiki::articleFromTitle( $t ); $article = new TalkHereArticle( $a, $talk ); } } return true; 

Было бы достаточно исправить ошибку, по крайней мере, в этом файле?

Похоже, ваш новый сервер работает под управлением PHP 5.3, а ваш старый работает с более ранней версией.

В PHP 5.3 namespace является ключевым словом, благодаря новой функции пространства имен .

Ваш существующий класс Namespace нужно будет переименовать. Ошибка синтаксического анализа возникает, когда код пытается разрешить Namespace::isTalk() в имя пространства имен. (Синтаксис для этого был бы чем-то похожим на namespace Foo , он становится путаным при просмотре оператора. Разрешения).

PAAMAYIM_NEKUDOTAYIM – это имя для :: (это иврит для двойной кишки)

Проверьте все строки, содержащие :: и убедитесь, что все они правильные.