[OO] Access type in interface

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ward van der Put
Moderator

Ward van der Put

30/11/2013 10:29:12
Quote Anchor link
Meestal gebruik ik expliciet public in interfaces:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
interface FooBarInterface
{
    public function getFoo();
    public function setBar($bar);
}

?>

Volgens de PHP-parser moet je public hier echter weglaten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
interface FooBarInterface
{
    function
getFoo();
    function
setBar($bar);
}

?>

Wat vinden jullie hiervan?
 
PHP hulp

PHP hulp

27/11/2024 19:11:02
 
Wouter J

Wouter J

30/11/2013 10:39:29
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

30/11/2013 10:58:58
Quote Anchor link
PHP 5.3.5 en 5.3.10 weigeren een private of protected in interfaces. PHP 5.3.27 slikt dit wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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”.
 
Wouter J

Wouter J

30/11/2013 11:35:59
Quote Anchor link
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.
 
Ward van der Put
Moderator

Ward van der Put

30/11/2013 11:43:40
Quote Anchor link
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.
 
Reshad F

Reshad F

30/11/2013 19:40:04
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
Modifier    | Class | Package | Subclass | World
++++
public      |  ?    |    ?    |    ?     |   ?
++++
protected   |  ?    |    ?    |    ?     |   x
++++
no modifier |  ?    |    ?    |    x     |   x
++++
private     |  ?    |    x    |    x     |   x
Gewijzigd op 30/11/2013 19:42:16 door Reshad F
 
Dos Moonen

Dos Moonen

30/11/2013 20:18:51
Quote Anchor link
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
 
Ward van der Put
Moderator

Ward van der Put

01/12/2013 08:29:51
Quote Anchor link
Reshad en Dos, dank voor jullie reacties! Het is me helder.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.