我是无脂肪框架的新手,我对全局变量有点困惑。
$f3->route('GET /@page','display');
function display($f3) {
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
$f3->run();
这里我使用GET / @页面作为url路由的标记。在里面 函数我然后使用$ 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();
所以我的问题是:为什么我必须将$ f3类传递给函数?
... THX
答案 0 :(得分:14)
可以使用静态调用$f3=require...
在代码中的任何位置检索在index.php($f3=Base::instance()
)的最开始声明的F3实例变量。
无论如何,为方便起见,在路由时,此F3实例以及路由参数将传递给路由处理程序。因此,不要将路由处理程序定义为:
function display() {
$f3=Base::instance();
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
您可以将其定义为:
function display($f3) {
echo 'I cannot object to an object' . $f3->get('PARAMS.page');
};
甚至更好:
function display($f3,$params) {
echo 'I cannot object to an object' . $params['page'];
};
这三个功能完全相同,所以你应该选择一个你最了解的功能。但是你应该记住$f3
和$params
只在路由时传递 ,这意味着3个函数:路由处理程序,beforeRoute()钩子和afterRoute()钩。在代码中的任何其他位置(包括类构造函数内),您应该调用Base::instance()
来检索F3实例。
PS:你的问题是“为什么我必须将$ f3类传递给函数?”,我建议你重命名它的标题以反映它。
UPDATE:从版本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
}
}