Ik heb een abstracte class en een extension ervan:
En vervolgens de extension:
Als de insert methode in de extended class wordt aangeroepen moet er een user object worden meegegeven. Nu is het echter zo, dat je iedere willekeurige variabele er in zou kunnen gooien, zonder dat PHP daar over mekkert. Ik wil dus een vorm van type hinting toepassen met behoud van de abstracte beschrijving van de parent class.
Wat hierboven staat, werkt niet.
Foutmelding: Fatal error: Declaration of UserDao::insert() must be compatible with that of Dao::insert() in /usr/[......]
De geimplementeerde insert methode van het UserDao object wil nog steeds een ValueObject zien. Dit zou al een verbetering (halve type hinting is beter dan geen), alleen nog steeds niet erg strict. Nu is mijn vraag eigenlijk: kan dit, en zo ja, hoe?
Voor mijn gevoel heb ik nu de keuze:
- Abstract functions weglaten;
- Of niet (voor de helft) aan type hinting doen.
En dat vind ik niet voldoende, ik wil graag een vorm van allebei
PHP:
1
2
3
4
5
6
7
| class ValueObject {} abstract class Dao { protected $dbConn,$resultset; abstract protected function insert(ValueObject $vo); } |
En vervolgens de extension:
PHP:
1
2
3
4
5
6
7
8
9
| class UserDao extends Dao { public function insert(User $vo) { /* insert code */ } } class User extends ValueObject { private $id,$name; } |
Als de insert methode in de extended class wordt aangeroepen moet er een user object worden meegegeven. Nu is het echter zo, dat je iedere willekeurige variabele er in zou kunnen gooien, zonder dat PHP daar over mekkert. Ik wil dus een vorm van type hinting toepassen met behoud van de abstracte beschrijving van de parent class.
Wat hierboven staat, werkt niet.
Foutmelding: Fatal error: Declaration of UserDao::insert() must be compatible with that of Dao::insert() in /usr/[......]
De geimplementeerde insert methode van het UserDao object wil nog steeds een ValueObject zien. Dit zou al een verbetering (halve type hinting is beter dan geen), alleen nog steeds niet erg strict. Nu is mijn vraag eigenlijk: kan dit, en zo ja, hoe?
Voor mijn gevoel heb ik nu de keuze:
- Abstract functions weglaten;
- Of niet (voor de helft) aan type hinting doen.
En dat vind ik niet voldoende, ik wil graag een vorm van allebei