php – typová kontrola interface
- Filip111
- Člen | 244
Nepatří to úplně do tohohle fóra, ale mám důvěru ve zdejší lidi :)
tak se zeptám.
Mám interface, např. IShoppingCart
, ten je implementován
třídou ShoppingCartSession
class ShoppingCartSession extends Nette\Object implements IShoppingCart
Potom mám nějakou komponentu, která pracuje s touto třídou ShoppingCartSession, ale striktně používá pouze funkce definované v interfacu a proto bych chtěl udělat typovou kontrolu na IShoppingCart…což se mi ale nedaří.
Konkrétní příklad – objekt ShoppingCartSession předávám komponentě v construktoru:
class CartInfoControl extends \Nette\Application\UI\Control {
public function __construct($cart) {
...
}
}
Takhle to funguje, ale není tam žádná typová kontrola.
Pokud přidám typovou kontrolu na ShoppingCartSession tak to funguje, ok.
public function __construct(ShoppingCartSession $cart)
Já ale chci mít typovou kontrolu na interface a nikoliv konkrétní implementaci, takže se snažím zprovoznit toto:
public function __construct(IShoppingCart $cart)
A to už nefunguje a hlásí chybu:
Argument 1 passed to EshopModule\CartInfoControl::__construct() must be an instance of EshopModule\IShoppingCart, instance of web123\Eshop\ShoppingCartSession given
Chybě rozumím, ale jak docílím toho abych měl v komponentě typovou kontrolu vstupujícího objektu a mohl tam podstrčit libovolnou instanci interfacu?
Možná teď vypadám jako úplná lama, ale hledám už nějakou dobu na netu a nemůžu najít odpověď…
- pekelnik
- Člen | 462
Je to vsechno napsane v te chybe, a prestoze nevidim namespace troufnu si tvrdit, ze ti v te komponente chybi use pro ten interface.
use web123\Eshop\IshoppingCart;
Je vyzadovan interface IShoppingCart
v namespace
EshopModule
.
Ale ma byt vyzadovan interface
web123\Eshop\IshoppingCart
.
Editoval pekelnik (12. 6. 2012 14:36)