Php 如何制作一个操纵实例的辅助函数?

Php 如何制作一个操纵实例的辅助函数?,php,Php,我正忙于尽可能多地学习php框架 现在我有一个满是路线的文件。路线采用这种一般形式 $bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']); 因此,“routes”文件不是一个类,它只是一个文件,我将其包含在index.php页面的$bootstrap=new bootstrap($router)下面 如您所见,要添加路由,我将其添加到实例化的$bootstrap对象

我正忙于尽可能多地学习php框架

现在我有一个满是路线的文件。路线采用这种一般形式

$bootstrap->router->add('/home', ['controller' => 'home', 'action' => 'index']);
因此,“routes”文件不是一个类,它只是一个文件,我将其包含在index.php页面的
$bootstrap=new bootstrap($router)下面

如您所见,要添加路由,我将其添加到实例化的$bootstrap对象中,该对象本身有一个实例化的->router对象,我在其中调用'add()'方法

现在我想通过写这样的东西使添加路由变得更容易

route('/home', ['controller' => 'home', 'action' => 'index']);
问题

具体怎么做还不清楚。。。我甚至不确定这是否已经完成。我已经尝试创建一个“helpers/routeHelper文件”,但这会使我的请求超出对象范围

…所以我有点困惑,如何在面向对象代码中实现一个平面旧辅助函数

非常感谢。

匿名功能 如果您愿意在该
路线(…
行)的开头添加
$

$route = function($path, $options) use ($bootstrap) {
     $bootstrap->router->add($path, $options);
}
会有用的

全局
$bootstrap
否则,将引导对象引入路由函数将是肮脏的:

function route($path, $options) {
     global $bootstrap; // <-- i don't like this
     $bootstrap->router->add($path, $options);
}
在主程序中,只需在该阵列上循环:

foreach($routes as $path => $options) {
    $bootstrap->router->add($path, $options);
}
这是我脑海中突然出现的三种解决方案…

匿名函数 如果您愿意在该
路线(…
行)的开头添加
$

$route = function($path, $options) use ($bootstrap) {
     $bootstrap->router->add($path, $options);
}
会有用的

全局
$bootstrap
否则,将引导对象引入路由函数将是肮脏的:

function route($path, $options) {
     global $bootstrap; // <-- i don't like this
     $bootstrap->router->add($path, $options);
}
在主程序中,只需在该阵列上循环:

foreach($routes as $path => $options) {
    $bootstrap->router->add($path, $options);
}
这是我脑海中突然出现的三种解决方案…

像这样

if(!function_exists( 'route' ) ){
    function route( $path, $params ){
        $bootstrap = ''; //?
        $bootstrap->router->add($path, $params);
    }
}
当然,我不知道$bootstrap是从哪里来的,所以很明显,您需要它。您可以将它作为参数传入,但如果可能,最好在函数内部初始化它。

像这样

if(!function_exists( 'route' ) ){
    function route( $path, $params ){
        $bootstrap = ''; //?
        $bootstrap->router->add($path, $params);
    }
}

当然,我不知道$bootstrap是从哪里来的,所以很明显,你会想把它放在那里。你可以把它作为一个参数传递进来,但如果可能的话,最好在函数内部初始化它。

嗯…放一个名为route maybe的函数?嗯…放一个名为route maybe的函数?非常有趣,非常感谢你展示做这件事的不同方法,如此有趣的东西!就我个人而言,我更喜欢“数组中的定义”版本这是一个很好的解决方案…看起来更干净,消化所有这些好信息需要一段时间!非常有趣,非常感谢您展示了不同的方法,非常有趣的东西!就个人而言,我更喜欢“数组中的定义”版本。;(o)这是一个很好的解决方案。。。看起来干净多了,消化所有这些好信息需要一段时间!您可能需要执行
}else{
和错误检查以确定函数是否存在,但这取决于您的框架。谢谢,我们会考虑这一点。您可能需要执行
}else{
和错误检查以确定函数是否存在,但这取决于您的框架。谢谢,我们会考虑这一点。