Liz*_*Liz 7 php routing function global-variables fat-free-framework
我是无脂肪框架的新手,我对全局变量有点困惑.
$f3->route('GET /@page','display');
function display($f3) {
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
$f3->run();
Run Code Online (Sandbox Code Playgroud)
这里我使用GET/@页面作为url路由的标记.在函数i中,然后使用$ f3-> get('PARAMS.page')来获取该变量的值.
由于$ f3-> get是获取全局变量的方法,为什么我必须将$ f3类传递给函数.
下面的代码不起作用($ f3类没有传递给函数).
$f3->route('GET /@page','display');
function display() {
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
$f3->run();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:为什么我必须将$ f3类传递给函数?
谢谢...
xfr*_*a35 15
$f3=require...可以使用静态调用在代码中的任何位置检索在index.php()的最开始声明的F3实例变量$f3=Base::instance().
无论如何,为了方便起见,在路由时,这个F3实例以及路由参数被传递给路由处理程序.因此,不要将路由处理程序定义为:
function display() {
$f3=Base::instance();
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
Run Code Online (Sandbox Code Playgroud)
你可以把它定义为:
function display($f3) {
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
Run Code Online (Sandbox Code Playgroud)
甚至更好:
function display($f3,$params) {
echo 'I cannot object to an object' . $params['page'];
};
Run Code Online (Sandbox Code Playgroud)
这3个功能完全相同,所以你应该选择你最了解的功能.但是你应该记住它$f3并且$params只在路由时传递,这意味着3个函数:路由处理程序,beforeRoute()钩子和afterRoute()钩子.在代码中的任何其他位置(包括类构造函数内),您应该调用Base::instance()以检索F3实例.
PS:你的问题是"为什么我必须将$ f3类传递给函数?",我建议你重命名它的标题以反映它.
更新:从版本3.2.1开始,F3实例也传递给路由处理程序类的构造函数:
class myClass {
function display($f3,$params) {
echo 'I cannot object to an object' . $params['page'];
}
function __construct($f3) {
//do something with $f3
}
}
Run Code Online (Sandbox Code Playgroud)