Fat-Free-Framework глобальные переменные и функции
Я новичок в фреймворке без жира, и я немного запутался в глобальных переменных.
$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 в функцию?
Спасибо...
1 ответ
Переменная экземпляра F3, которая объявлена в самом начале вашего index.php ($f3=require...
) можно получить в любом месте кода с помощью статического вызова $f3=Base::instance()
,
В любом случае, для удобства, во время маршрутизации этот экземпляр 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
}
}