Global en functies
Ik gebruik voor mijn CMS try-catch blokken om hier en daar wat exceptions op te roepen als dat nodig is, en ik vroeg me het volgende af. Ik heb deze code:
Maar nu ga ik straks die hele handler in een 'Exception Class' gooien, gewoon omdat OOP juist leuk en handig is. En dan vraag ik me af, die global $tpl, dat kan toch niet meer anno 2011?
Ik wil wel juist in de exceptionhandler Smarty namelijk gebruiken.
Hoe kan dit dan beter?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
set_exception_handler('error_handler');
function error_handler($e){
global $tpl;
$tpl->assign('title',"Error");
$tpl->assign('refferer',$_SERVER['HTTP_REFERER']);
$tpl->assign('error_key',$e->getMessage());
$tpl->assign('error',$errors[$e->getMessage()]);
$tpl->display('error.tpl');
}
?>
function error_handler($e){
global $tpl;
$tpl->assign('title',"Error");
$tpl->assign('refferer',$_SERVER['HTTP_REFERER']);
$tpl->assign('error_key',$e->getMessage());
$tpl->assign('error',$errors[$e->getMessage()]);
$tpl->display('error.tpl');
}
?>
Maar nu ga ik straks die hele handler in een 'Exception Class' gooien, gewoon omdat OOP juist leuk en handig is. En dan vraag ik me af, die global $tpl, dat kan toch niet meer anno 2011?
Ik wil wel juist in de exceptionhandler Smarty namelijk gebruiken.
Hoe kan dit dan beter?
Gewijzigd op 18/11/2011 20:53:38 door - Ariën -
PHP hulp
04/12/2024 20:12:49Jacco Brandt
18/11/2011 20:31:20Dat kan op verschillende manieren. Je kunt bijvoorbeeld een nieuwe layout-class maken, mocht er echter geen andere informatie instaan. Als dit wel het geval is kun je gebruik maken van een singleton-instantie, waardoor je deze waardes behoud en dus de class laad dmv $tpl = Layout::getInstance(). De alternatieven zijn: deze variabele meesturen met de __construct; een 'container' meesturen met de __construct die alle belangrijke variabelen bevat of deze 'container' statisch maken zodat je er overal bijkunt.