[OO] Access type in interface
Code (php)
Volgens de PHP-parser moet je public hier echter weglaten:
Wat vinden jullie hiervan?
Het weglaten van type (aangezien het default tot public) was iets van oude PHP versies, in PHP5.3 wordt aangeraden dit altijd en overal te gebruiken.
Code (php)
Bij de oudere 5.3-versies krijg je het advies om het access type weg te laten (waar ik zou zeggen dat je het beter public kunt maken): “Fatal error: Access type for interface method FooBarInterface::getFoo() must be omitted”.
Interfaces zijn contracten met de buitenwereld. Wanneer je een interface implementeert leg je een contact met de buitenwereld dat jij zorgt dat die methods beschikbaar zijn. Het is dus totaal zinloos om protected en private methods te declareren in een interface.
Wouter J op 30/11/2013 11:35:59:
Dat weet ik Wouter :) Maar daarom vroeg ik me juist twee dingen af:Interfaces zijn contracten met de buitenwereld. Wanneer je een interface implementeert leg je een contact met de buitenwereld dat jij zorgt dat die methods beschikbaar zijn. Het is dus totaal zinloos om protected en private methods te declareren in een interface.
• Waarom zegt de parser niet dat je de methoden beter public kunt maken? De parser heeft kennelijk liever dat je het access type helemaal weglaat.
• Waarom slikt PHP 5.3.27 een private methode? Hier zou ik nu juist weer een fatal error voor een onbruikbare interface verwachten.
Toevoeging op 30/11/2013 19:40:50:
? = toegankelijk
x = niet toegankelijk
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Modifier | Class | Package | Subclass | World
++++
public | ? | ? | ? | ?
++++
protected | ? | ? | ? | x
++++
no modifier | ? | ? | x | x
++++
private | ? | x | x | x
++++
public | ? | ? | ? | ?
++++
protected | ? | ? | ? | x
++++
no modifier | ? | ? | x | x
++++
private | ? | x | x | x
Gewijzigd op 30/11/2013 19:42:16 door Reshad F
Ward van der Put op 30/11/2013 11:43:40:
De parser heeft kennelijk liever dat je het access type helemaal weglaat.
Nee, of je nou 'public' gebruikt of helemaal geen access type, voor PHP is het hetzelfde.
function miauw(); is prima
public function miauw(); is prima
protected function miauw(); is fout, 'protected' weg laten is een van de twee manieren om het te fixen
private function miauw(); is fout, 'private' weg laten is een van de twee manieren om het te fixen
Omdat voor de werking het niet uit maakt (in tegenstelling tot JAVA) of je geen access type of 'public' als access type gebruikt moet je zelf kiezen wat je het beste vindt.
Over het algemeen zal je verteld worden om 'public' te gebruiken. (door programmeurs, de parser boeit niet) Soms een access type gebruiken, en andere keren niet is nou niet bepaald consequent.
Quote:
PHP 5.3.27 slikt dit wel
Klinkt als een bug, mijn PHP 5.5.6 slikt het namelijk niet.
Gewijzigd op 30/11/2013 20:39:28 door Dos Moonen
Reshad en Dos, dank voor jullie reacties! Het is me helder.