用PHP中的Alto Router包调用函数时出现问题



我在使用alto路由调用函数时遇到问题。在index.php上,我有一个路由,它调用另一个文件(test.php(中的函数,而这两个文件在同一目录(root(中。我没有得到任何响应,但当我把这个函数从test.php放到index.php时,我的路由在哪里,它就可以工作了,我需要这个函数在test.php文件中工作。我试着在test.php文件中放入"require(index.php(",但不起作用。如果有人知道解决方法,我们将不胜感激。这是我的密码。

index.php

<?php
require 'vendor/autoload.php';
$router = new AltoRouter();
$router->map('GET','/test', 'test.php', 'testfunction'); // HERE IS THAT ROUTE!!!
$match = $router->match();
if ( is_array($match) && is_callable( $match['target'] ) ) {
call_user_func_array( $match['target'], $match['params'] ); 
} else {
header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}

test.php

<?php
require 'index.php';
function testfunction()
{
echo "YES IT WORKS!";
}

这是推测性的,因为我不知道AltoRouter,但是如果每个页面都有自己的(单个(特定函数,你可以将函数作为闭包返回:

<?php // ./test.php
return function () {
return "YES IT WORKS!";
};

闭包是在PHP 5.3中引入的。然后,你的路由器会是这样的:

$router->map('GET', '/test', require 'test.php'); 

这是因为requireinclude从脚本返回:

处理返回:include在失败时返回FALSE并引发警告。成功包含,除非被包含的文件覆盖,否则返回1。可以在包含的文件中执行return语句,以终止该文件中的处理并返回到调用该文件的脚本。此外,还可以从包含的文件返回值。可以像对待普通函数一样,获取include调用的值

https://www.php.net/manual/en/function.include.php

点击此处查看示例:

https://replit.com/@userdud/SimpleRouterReturnClosure#index.php


如果您有7.4,箭头函数会使语法更简单,例如:

<?php // ./test.php
return fn() => "YES IT WORKS!";

相关内容

  • 没有找到相关文章

最新更新