【问题标题】:Unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting T_NS_Separator意外的 T_PAAMAYIM_NEKUDOTAYIM,需要 T_NS_Separator
【发布时间】:2012-02-02 19:46:45
【问题描述】:

我在周末将应用程序从 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;

至少在这个文件中是否足以修复错误?

【问题讨论】:

  • @Charles hehe 错误拼写不正确:-P
  • 顺便说一句,错误实际上拼写为“PAAMAYIM NEKUDOTAYIM”(在谷歌搜索时很有帮助)。正如 Neal 提到的,“PAAMAYIM NEKUDOTAYIM”是希伯来语中双冒号的意思(PHP 的原作者是以色列人)。
  • 噗,我是标签法学家,不是拼字纳粹。
  • Zend Engine 的作者是以色列人,而 Lasmus 不是。

标签: php syntax-error


【解决方案1】:

看起来您的新服务器运行的是 PHP 5.3,而您的旧服务器运行的是早期版本。

在 PHP 5.3 中,namespace 是一个关键字,这要归功于new namespace feature

您现有的Namespace 课程将需要重命名。当代码尝试将 Namespace::isTalk() 解析为命名空间名称时,会发生解析错误。 (这样做的语法类似于namespace Foo;看到:: 解析运算符时会感到困惑。)

【讨论】:

    【解决方案2】:

    PAAMAYIM_NEKUDOTAYIM is the name for the :: (it is Hebrew for twice colon)

    检查所有包含:: 的行并确保它们都是正确的调用。

    【讨论】:

    • @Gordon 我明白了(顺便说一句——不是每个人的答案都是一样的:-P)
    猜你喜欢
    • 2011-06-27
    • 2011-09-09
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2013-09-22
    相关资源
    最近更新 更多