Например, простая система типов mvc:
/ api / class / method переписывают в переменные php, используя .htaccess / nginx.conf
, затем делают что-то вроде:
<?php
// Set up class + method variables
$className = some_class_filter($_GET['class']);
$method = some_method_filter($_GET['method']);
// Check if class exists and execute
if(file_exists(BASE . "/controllers/" . $className . ".class.php")) {
require BASE . "/controllers/" . $className . ".class.php";
$$className = new $className();
// Execute the method
$$className->$method();
} else {
// Spit out some error based on the problem
}
?>
Это ужасно плохая практика?Если это плохая практика, может кто-нибудь объяснить, почему именно?И если так, есть ли лучший способ сделать то, что я делаю?
EDIT По сути, причина, по которой я использую переменные переменные, состоит в том, чтобы упростить расширение основной системы -т.е. добавление в новый контроллер приятно и просто.Я определенно понимаю риски безопасности, связанные с созданием практически любой функции или класса без какого-либо фильтра.
'some_filter_here' может быть списком разрешенных контроллеров - белого списка, как некоторые из них упоминали здесь.