【问题标题】:Syntax error in PHP 5.2PHP 5.2 中的语法错误
【发布时间】:2011-12-07 12:41:15
【问题描述】:

在 php 5.3 中,我可以使用类名作为变量,也可以调用静态变量。

$class_name = 'Test';
$class_name::$static_var;

php 5.2版本如何调用?

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in ...

【问题讨论】:

标签: php


【解决方案1】:

T_PAAMAYIM_NEKUDOTAYIM 是 PHP 使用的双冒号范围解析 - :: 你可以试试这个 $class_name = '测试'; $class_name->$static_var;

【讨论】:

    【解决方案2】:

    @user762799 这是您想要在 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;
    

    PAAMAYIM_NEKUDOTAYIM 表示范围解析运算符(::) 实际上,在您的代码中,PHP 无法在 $class_name 范围内识别 $static_var,这就是发生错误的原因。

    如果您仍然不清楚,请告诉我。谢谢你:)

    【讨论】:

      【解决方案3】:

      您确实应该更新您的 PHP 版本,不再支持 5.2,但是...

      ...在 PHP 5.2 中解决这个问题的唯一方法是使用 eval:

      $return = eval($class_name . '::\\$static_var;');
      

      但请务必在使用之前验证$class_name,否则可能会注入任意代码(例如$class_name = 'do_bad_things(); Class_Name)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-02
        • 2016-10-23
        • 2013-03-14
        • 1970-01-01
        相关资源
        最近更新 更多