6

我很难理解为什么我Unexpected T_PAAMAYIM_NEKUDOTAYIM在以下代码中出现错误,这对我来说似乎完全有效......

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

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

然而,在以前的版本中,我不能这样做$result::$id = strval($xpto);,有人知道为什么吗?

有没有解决这个问题的方法?

4

5 回答 5

3

<错误的原因只是5.3不支持该语法。

但是,如果您尝试仅访问静态变量 $id,则语法为:

$result::id

如果您确实需要访问静态变量变量,则一种解决方法是使用反射:

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

反射类

于 2011-02-14T18:17:47.757 回答
1

查看键盘后:

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

... 应该

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

我在新的粘贴中更正了这个问题,错误仍然存​​在......只是让你知道演示代码中的问题。

编辑

static每个关于关键字的PHP 文档页面,

从 PHP 5.3.0 开始,可以使用变量来引用类。变量的值不能是关键字(例如 self、parent 和 static)。

不幸的是,在以前的版本中没有详细说明为什么要这样做,我也没有在评论中看到解决方法。

但是,因为该类是静态的,所以您应该能够直接更改属性:

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

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

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

    return $result;
}
于 2011-02-14T18:10:03.303 回答
0

PHP 版本 5.3.3,我没有在该代码上收到任何错误。

输出:

字符串(0)“”字符串(3)“开发”字符串(4)“产品”字符串(0)“”

您的错误可能在其他地方。请仔细检查报告的行号。

于 2011-02-14T18:05:27.190 回答
0

我是通过参考来到这里的: PHP 5.2 中的语法错误 ,Chandresh 提到了您的链接:PHP 5.2 的解决方法是:

class Sample{
    public static $name;

    public function __construct(){
        self::$name = "User 1";
    }
}

$sample = new Sample();
$class = 'Sample';
$name = 'name';
$val_name = "";
$str = '$class::$$name';
eval("\$val_name = \"$str\";");
//echo $val_name."<br>";
eval("\$name = $val_name;");
echo $name;

如果您已经解决,请忽略。谢谢

于 2011-10-14T09:22:39.697 回答
0

另一个案例:

如果您使用以下方法,它可能会发生在某些服务器上(PHP VERSION ??): if (empty(NAME_OF_A_CONSTANT)) ...

于 2015-07-20T11:35:06.963 回答