Неожиданный 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 это имя для :: (это иврит для двоеточия)

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

Другие вопросы по тегам