getter/setter op 1 regel?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

15/03/2013 16:27:47
Quote Anchor link
Hallo,

Ik heb regelmatig getters/setters die maar uit 1 regel bestaan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

public function setFoo($foo) {
  $this->foo = $foo;
}


?>

Dit komt bij mij echt heel vaak voor. Het zelfde geldt voor getters.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

public function getFoo() {
  return $this->foo;
}


?>

Nu vraag ik me af of hier mensen zijn die hun getters/setters op 1 regel zetten, dus zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

public function setFoo($foo) { $this->foo = $foo; }

public function getFoo() { return $this->foo; }

?>

Stel dat een class 10 van zulke getters en setters heeft, dan wordt m'n class dus meteen 40 regels korter. Goed idee???
 
PHP hulp

PHP hulp

28/11/2024 06:31:38
 
Wouter J

Wouter J

15/03/2013 16:29:26
Quote Anchor link
Moet je zelf weten.

Ik vind het inconsistent en zal het zelf nooit doen. Bestands lengte maakt van de rest niet heel veel uit in PHP.
 
Reshad F

Reshad F

15/03/2013 16:35:35
Quote Anchor link
Ik doe het ook nooit. ik vind het onleesbaar als is het maar 1 regel.

Wat ik wel doe als ik functies aanmaak waar ik verder niks mee doe omdat deze in een Interface staan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

public function setFoo($foo) {}

?>


en dat is dan ook echt de enige uitzondering.
 
Ozzie PHP

Ozzie PHP

15/03/2013 17:44:09
Quote Anchor link
Oké thanks voor de reacties.

Ben er ook nog niet over uit eerlijk gezegd. Maar soms heb ik in een bestand heel veel setters en getters en dan zou het wellicht handig zijn om de class een stuk kleiner te maken.

Ik heb overigens eens bij een bedrijf gewerkt waar ze dit standaard deden, en dan ook geen commentaar-regels erbij. Gewoon zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public function getBar() { return $this->bar; }
public function getFoo() { return $this->foo; }
public function getFooBar() { return $this->foobar; }
// enz.
?>
 
Local Dev

Local Dev

15/03/2013 20:09:57
Quote Anchor link
ik doe het volgende:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
public function getFoo()
{

    return $this->foo;
}


public function setFoo($foo)
{

    $this->foo = $foo;
    return $this;
}

?>


En ik adviseer het zo ook te doen, is leesbaarder, tevens is het best practise om in de setter het object zelf te returnen inplaats van de var zelf.
Gewijzigd op 15/03/2013 20:13:30 door Local Dev
 
Ozzie PHP

Ozzie PHP

15/03/2013 20:12:38
Quote Anchor link
Waarom zou je dat doen?

Nu return je iets in een setter. Dat lijkt me niet de bedoeling van een setter.
 
Local Dev

Local Dev

15/03/2013 20:14:17
Quote Anchor link
Ik return het object
Gewijzigd op 15/03/2013 20:14:33 door Local Dev
 
- Raoul -

- Raoul -

15/03/2013 20:14:36
Quote Anchor link
Local Dev.. het is idd een handige shortcut voor method chaining maar helemaal OO is het niet.
 
Ozzie PHP

Ozzie PHP

15/03/2013 20:16:26
Quote Anchor link
@local: ik zie dat je het object returnt, maar waarom zou je dat doen? Een setter is bedoeld om iets te setten, niet om iets terug te geven...
 
Local Dev

Local Dev

15/03/2013 20:18:18
Quote Anchor link
@Raoul, dit is zeer gebruikelijk bij getters en setters, maar hoor graag waarom jij dit slecht en geen oo vind?


Toevoeging op 15/03/2013 20:21:51:

@Ozzie, ja dat klopt, maar bij een setter set je een bepaald onderdeel in het object / entity een waarde in het betreffende object.
Meer info linkje
Gewijzigd op 15/03/2013 20:30:30 door Local Dev
 
Ozzie PHP

Ozzie PHP

15/03/2013 20:35:16
Quote Anchor link
Ja, je set iets, MAAR... jij geeft vervolgens ook iets terug, namelijk het object. Waarom zou je dat doen? Zodat je meerdere dingen tegelijk kunt setten ofzo? Ik vind het niet bij een setter horen om het object te returnen. Vandaar dat ik wel benieuwd ben waarom je dit doet.
 
Joakim Broden

Joakim Broden

15/03/2013 20:48:04
Quote Anchor link
- Raoul - op 15/03/2013 20:14:36:
Local Dev.. het is idd een handige shortcut voor method chaining maar helemaal OO is het niet.

Daarom dus, het is gewoon een handigheidje..

Zo kun je bijvoorbeeld dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $class
->setFoo()->setBar()->setFooBar();
?>

ipv
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $class
->setFoo();
    $class->setBar();
    $class->setFooBar();
?>
 
Ozzie PHP

Ozzie PHP

15/03/2013 20:50:55
Quote Anchor link
Ik snap de insteek wel, alleen zou ik dit zelf niet in een setter toepassen.
 
Joakim Broden

Joakim Broden

15/03/2013 21:04:56
Quote Anchor link
Ja omdat jij het ziet als 'set' duuuuuus je mag niks returnen. Klopt zo hoort officieel OOP, maar OOP is ook bedoelt om makkelijk en handig te programmeren. Het is maar hoe letterlijk je 'set' en OOP neemt :-)
 
- Raoul -

- Raoul -

15/03/2013 21:07:50
Quote Anchor link
Het blijft natuurlijk persoonlijke voorkeur, ik doe het niet, maar die keuze ligt natuurlijk aan jezelf.
 
Ozzie PHP

Ozzie PHP

16/03/2013 01:10:41
Quote Anchor link
Ik heb het eens getest... ik kreeg een class zomaar 30 regels korter.... maaaaaar... het leest toch niet echt prettig, dus ik ga het toch maar niet toepassen.
 
Ward van der Put
Moderator

Ward van der Put

16/03/2013 09:30:40
Quote Anchor link
Kwestie van stijl, maar er bestaat een stijlgids... Uit sectie 4, Classes, Properties, and Methods, van PSR-2:
PSR-2 Coding Style Guide:
The opening brace for the class MUST go on its own line; the closing brace for the class MUST go on the next line after the body. [...] A method declaration looks like the following. Note the placement of parentheses, commas, spaces, and braces:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
namespace Vendor\Package;

class ClassName
{
    public function fooBarBaz($arg1, &$arg2, $arg3 = [])
    {

        // method body
    }
}

?>
Gewijzigd op 16/03/2013 09:39:00 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

16/03/2013 14:58:07
Quote Anchor link
Ah oke... ik zet zelf de accolades altijd ACHTER de class naam en de functie naam. Inderdaad een kwkestie van stijl/smaak... en het scheelt toch weer een paar regels ;)
 
Willem vp

Willem vp

16/03/2013 15:18:18
Quote Anchor link
Ozzie PHP op 16/03/2013 14:58:07:
Ah oke... ik zet zelf de accolades altijd ACHTER de class naam en de functie naam. Inderdaad een kwkestie van stijl/smaak... en het scheelt toch weer een paar regels ;)

Even wat historische achtergrond: 20+ jaar geleden werd op Unix-systemen voornamelijk vi als editor gebruikt (tegenwoordig nog steeds overigens, maar vroeger waren er vrijwel geen alternatieven).

In vi kun je, als je openings-accolades op een nieuwe regel staan, snel tussen functies navigeren met [[ en ]]. Als je de accolade achter de functienaam zet, werkt dat niet. Omdat je vroeger meestal zat te programmeren op een domme terminal die via een niet al te snelle RS232-verbinding met de computer was verbonden, was het een ramp om door je listing heen te moeten scrollen. Dit soort navigatie was dan ook zeer welkom.

Overigens zet ik ook bij if/for/while-blokken de openingsaccolade op een nieuwe regel. Deels omdat me dat zo aangeleerd is, deels omdat je dan eenvoudiger het begin en eind van een blok kunt matchen, en tegenwoordig vooral omdat ik nogal eens #-tekens in mijn condities heb staan, waar de syntax highlighting van sommige editors niet goed mee om kan gaan. Dat is weliswaar niet in PHP, maar gewoontes zijn niet taalgebonden. ;-)
 
Ozzie PHP

Ozzie PHP

16/03/2013 15:33:52
Quote Anchor link
Hehe, thanks voor de toelichting Willem :)
 



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.