Мне нужно было создать динамические крошки, которые должны автоматически реализовываться приложением.Итак, у меня есть следующая структура в URL для навигации: nav = user.listPMs.readPM & args = 5
, тогда у меня может быть файл-функция, единственной целью которого будет определение самой функции user.listPMs.readPM.:
файл: nav / user.listPMs.readPM.php
function readPM($msgId)
{
/*code here*/
}
Конечно, это приводит к загромождению глобальной области видимости, так как я не заключаю в оболочку функциювнутри класса или с помощью пространств имен.Лучшее решение здесь, кажется, пространство имен, без сомнения, верно?Но я также подумал о другом:
file: nav / user.listPMs.readPM.php
return function($msgId)
{
/*code here*/
};
Да, этот простой файл просто возвращаетсяанонимная функция.Я думаю, что это удивительно, потому что мне не нужно заботиться о присвоении ему имени - поскольку я уже правильно назвал файл, в котором он содержится, создав пользовательскую функцию и все же назвав ее, казалось бы, просто излишним.Тогда в индексе у меня был бы такой маленький подвох:
file: index.php
if($closure = @(include 'nav/'.$_GET['nav']))
{
if($closure instanceof Closure)
{
$obj = new ReflectionFunction($closure);
$args = explode(',',@$_GET['args']);
if($obj->getNumberOfParameters($obj)<=count($args))
call_user_func_array($closure,$args);
else
die('Arguments not matching or something...');
} else {
die('Bad call or something...');
}
} else {
die('Bad request etc.');
}
Даже не нужно упоминать, что крошки хлеба могут бытькрасиво построенный последний, просто анализируя значение в переменной $ _GET ['nav'].
Итак, как вы думаете, есть ли лучшее решение этой проблемы?Вы нашли другой способ исследовать замыкания и / или отражения?