Глобальные переменные и функции 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. В функции 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(); 

Поэтому мой вопрос: почему я должен передать класс $ f3 функции?

Спасибо…

Solutions Collecting From Web of "Глобальные переменные и функции Fat-Free-Framework"

Переменная экземпляра 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 } }