可以使用静态调用$f3 = Base :: instance()在代码中的任何位置检索在index.php($f3 = require …)的最开始声明的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'];
};
这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
}
}