Неожиданный 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;
Будет ли этого достаточно, чтобы исправить ошибку, по крайней мере, в этом файле?
2 ответа
Похоже, ваш новый сервер работает под управлением PHP 5.3, в то время как ваш старый сервер работал под управлением более ранней версии.
В PHP 5.3 namespace
является ключевым словом, благодаря новой функции пространства имен.
Ваш существующий Namespace
класс нужно будет переименовать. Произошла ошибка разбора, когда код пытается разрешить Namespace::isTalk()
в имя пространства имен. (Синтаксис для этого будет что-то вроде namespace Foo
; это становится смущенным при виде ::
Оператор разрешения.)
PAAMAYIM_NEKUDOTAYIM
это имя для ::
(это иврит для двоеточия)
Проверьте все строки, которые содержат ::
и убедитесь, что все они правильные звонки.