Jak používat vlastní anotace
- Jan Endel
- Člen | 1016
Potřeboval bych pomoct s takovou akademickou otázkou, představoval bych si to nějak takhle, pro názornost zvolím systém co každý zná, eshop.
Mějmež Model Order s metodou get/setCustomerNote umožnující zadat poznámku zákazníka k objednávce, s vlastní anotací @package (vím, že ta je použita už na něco jiného):
Class OrderModel extends BaseModel
{
private $customerNote;
...
/**
* Umoznuje nastavit uzivatelskou poznamku
* @params $customerNote uzivatelska poznamka
* @package customerNote
*/
public function setCustomerNote($customerNote)
{
$this->customerNote = $customerNote;
}
/**
* Ziskava uzivatelskou poznamku
* @package customerNote
* @return string
*/
public function getCustomerNote()
{
return $this->customerNote;
}
}
v konfigu povolím package customerNote nebo naopak zakážu. Jak dosáhnu toho, aby při zakázání package customerNote vyskočila při volání této metody třebas vyjímka, že aplikace nemá tento balíček povolen, respektive, jde to nějak udělat v php?
- bojovyletoun
- Člen | 667
hmm… dávat do každé metody nějakou kontrolu se ti asi nechce…
viděl bych to na nějaký proxy návrhový vzor:
Ve skutečnosti budeš pracovat se Třídou Proxy s jednou property target:
$order= new Proxy(new Order)
– ta bude mít metodu
__call
: použije reflection metody dle jména fce v __call,
zjistíš anotaci getAnnotation, kontroluješ… ->
function __call($name,$args){
if()throw new Exc;else return
call_user_func_array(array($this->target,$name,$args))`
akorát co s type hintingem-
Editoval bojovyletoun (25. 9. 2011 1:01)