Ответ 1
T_PAAMAYIM_NEKUDOTAYIM - это разрешающая способность с двойной разрешающей способностью, используемая PHP, -:: Вы можете попробовать это $ class_name = 'Test'; $Class_name → $static_var;
В php 5.3 я могу использовать имя класса как переменную, и я могу вызвать статическую переменную.
$class_name = 'Test';
$class_name::$static_var;
Как назвать это в версии php 5.2?
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in ...
T_PAAMAYIM_NEKUDOTAYIM - это разрешающая способность с двойной разрешающей способностью, используемая PHP, -:: Вы можете попробовать это $ class_name = 'Test'; $Class_name → $static_var;
@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
, поэтому произошла ошибка.
Если вы все еще не поняли, дайте мне знать. Спасибо:)
Вам действительно нужно обновить версию PHP, 5.2 больше не поддерживается, но...
... в PHP 5.2 единственный способ взломать это - использовать eval
:
$return = eval($class_name . '::\\$static_var;');
Но не забудьте проверить $class_name
, прежде чем использовать это, иначе может быть введен произвольный код (например, $class_name = 'do_bad_things(); Class_Name
).