Unexpected T_PAAMAYIM_NEKUDOTAYIM in PHP 5.2.x

Alix Axel picture Alix Axel · Feb 14, 2011 · Viewed 14.1k times · Source

I'm having a hard time understanding why I'm getting an Unexpected T_PAAMAYIM_NEKUDOTAYIM error in the following code, which seems perfecly valid to me...

class xpto
{
    public static $id = null;

    public function __construct()
    {
    }

    public static function getMyID()
    {
        return self::$id;
    }
}

function instance($xpto = null)
{
    static $result = null;

    if (is_null($result) === true)
    {
        $result = new xpto();
    }

    if (is_object($result) === true)
    {
        $result::$id = strval($xpto);
    }

    return $result;
}

Output in PHP 5.3+:

echo var_dump(instance()->getMyID()) . "\n"; // null
echo var_dump(instance('dev')->getMyID()) . "\n"; // dev
echo var_dump(instance('prod')->getMyID()) . "\n"; // prod
echo var_dump(instance()->getMyID()) . "\n"; // null

In prior versions however, I can't do $result::$id = strval($xpto);, does anyone know why?

Are there any workarounds for this problem?

Answer

webbiedave picture webbiedave · Feb 14, 2011

The reason for the error is simply that the syntax isn't supported in < 5.3.

However, if you're trying to just access the static variable $id, then the syntax would be:

$result::id

If you do need to access a static variable variable, then a workaround is to use reflection:

$class = new ReflectionClass($xpto);
echo $class->setStaticPropertyValue ('id', strval($xpto));

ReflectionClass