Wednesday, 6 December 2017

php - Unexpected T_PAAMAYIM_NEKUDOTAYIM, expecting T_NS_Separator

itemprop="text">


I moved an application from
an href="http://en.wikipedia.org/wiki/List_of_Ubuntu_releases#Ubuntu_11.04_.28Natty_Narwhal.29"
rel="nofollow">Ubuntu 11.04 (Natty Narwhal) Server to a href="http://en.wikipedia.org/wiki/Red_Hat_Linux" rel="nofollow">Red Hat Enterprise
Linux (RHEL) server over the weekend. My error log is full of the PHP errors
in the subject line referencing the following
function:



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;
}


The
error is thrown in
the




If
(!Namespace::isTalk($ns)


statement.
This error is a new one for me. How might I resolve
it?



I changed the offending code
to:



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;


Would that
suffice to fix the error, at least in this file?



Answer




It looks like your new server is running PHP
5.3, while your old one was running an earlier
version.



In PHP 5.3,
namespace is a keyword, thanks to the href="http://us2.php.net/manual/en/language.namespaces.php" rel="noreferrer">new
namespace feature.




Your
existing Namespace class is going to need to be renamed. The
parse error is occurring as the code tries to resolve
Namespace::isTalk() into a namespace name. (The syntax for
doing so would be something akin to namespace Foo; it becomes
confused at seeing the :: resolution
operator.)


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print ...