Ошибка синтаксиса в PHP 5.2

В php 5.3 я могу использовать имя класса как переменную, и я могу вызвать статическую переменную.

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

Как назвать это в версии php 5.2?

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

Ответ 1

T_PAAMAYIM_NEKUDOTAYIM - это разрешающая способность с двойной разрешающей способностью, используемая PHP, -:: Вы можете попробовать это $ class_name = 'Test'; $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 не может идентифицировать $static_var в области $class_name, поэтому произошла ошибка.

Если вы все еще не поняли, дайте мне знать. Спасибо:)

Ответ 3

Вам действительно нужно обновить версию PHP, 5.2 больше не поддерживается, но...

... в PHP 5.2 единственный способ взломать это - использовать eval:

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

Но не забудьте проверить $class_name, прежде чем использовать это, иначе может быть введен произвольный код (например, $class_name = 'do_bad_things(); Class_Name).