Meestal gebruik ik expliciet public in interfaces:

<?php
interface FooBarInterface
{
    public function getFoo();
    public function setBar($bar);
}
?>

Volgens de PHP-parser moet je public hier echter weglaten:

<?php
interface FooBarInterface
{
    function getFoo();
    function setBar($bar);
}
?>

Wat vinden jullie hiervan?
Welke PHP Parser?

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.
PHP 5.3.5 en 5.3.10 weigeren een private of protected in interfaces. PHP 5.3.27 slikt dit wel:

<?php
interface FooBarInterface
{
    protected function getFoo();
    private function setBar($bar);
}
?>

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

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.
Dat weet ik Wouter :) Maar daarom vroeg ik me juist twee dingen af:

• 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.
Ward, Dat komt omdat public en default ( dus niks ) totaal anders zijn public is niet perse default. Althans dat is in Java zo en ik denk dat het in php ook vanwege dit feit is.

Toevoeging op 30/11/2013 19:40:50:

? = toegankelijk
x = niet toegankelijk



Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  ?    |    ?    |    ?     |   ?
————————————+———————+—————————+——————————+———————
protected   |  ?    |    ?    |    ?     |   x
————————————+———————+—————————+——————————+———————
no modifier |  ?    |    ?    |    x     |   x
————————————+———————+—————————+——————————+———————
private     |  ?    |    x    |    x     |   x

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.


PHP 5.3.27 slikt dit wel

Klinkt als een bug, mijn PHP 5.5.6 slikt het namelijk niet.
Reshad en Dos, dank voor jullie reacties! Het is me helder.

Reageren