get

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Laravel ontwikkelaar

Organisatie Het bedrijf werkt aan de meest gave online succes story’s. Dit wordt gedaan vanuit een uniek kantoor pand waarin iedereen informeel en gezellig met elkaar om gaan. De organisatie pakt het gehele traject aan, van strategie en concept tot en met development. Dit is het typische verhaal van een grote Techgigant. Ooit zijn ze begonnen kleine zolderkamer onderneming waar wat vrienden met elkaar gave dingen maakte. Nu heel wat jaren later staat er een gevestigde onderneming waar alleen maar gepassioneerde developers werken. In teamverband wordt er gewerkt aan mooie projecten voor de grootste namen. Functie Jij komt als PHP-programmeur

Bekijk vacature »

Medior C# .NET Web Developer Rotterdam

Organisatie Deze organisatie heeft zich de afgelopen jaren stevig in de markt gevestigd als full service web bureau. Zij focussen zich zowel op het leveren van software op maat als het complete design van websites. Van oudsher is de organisatie een webdesign bureau, echter hebben zij zich door de jaren heen ontwikkeld tot een full service web bureau. Door de toenemende vraag vanuit de markt hebben zij in de laatste 10 jaar ook maatsoftware toegevoegd tot hun core business. Dit is nu het grootste onderdeel binnen het bedrijf. Binnen deze échte Rotterdamse organisatie heerst een zeer leuke informele sfeer met

Bekijk vacature »

Senior Python Developer Google Cloud Utrecht

Organisatie Dit bedrijf is in 2012 gestart door twee programmeurs die door de jaren heen veel ervaring op hebben gedaan in de energiebranche. Wat ze hier hoofdzakelijk opviel was dat er ontzettend veel data moest worden verwerk en dat proces kon wel verbetering gebruiken. Er was namelijk veel vervuiling van de data en vanwege de komst van de slimme meter is er bijna elke minuut wel nieuwe data die moet worden verwerkt. Wat ze nu ontwikkeld hebben is een cloud-platform wat de eindgebruiker in staat stelt om data automatisch te verschonen, verwerken en analyses op los te laten. Zo wordt

Bekijk vacature »

Medior .NET Developer regio Den Bosch

Organisatie Voor dit toffe familiebedrijf ben ik op zoek naar een Medior .NET Developer in de regio Den Bosch. Het is een echt IT bedrijf, die inmiddels al meer dan 30 jaar bestaat. Ze maken hun eigen software en hier zal jij je dan ook volledig op focussen! Het bedrijf kenmerkt zich door een platte organisatiestructuur, waarbij de werkruimte voor programmeurs informeel is ingericht en waarbij er in scrum teams wordt gewerkt, in teams van 5 personen. Aan de voorkant van het bedrijf is het strakker. Aangezien de overheid een van de grootste klanten is, is de voorkant zakelijker ingericht.

Bekijk vacature »

Medior C# Developer

Vacature Omschrijving De financiële wereld is absoluut saai en de verzekeringswereld ook, maar niet bij dit bedrijf. Geloof je het niet? Let them prove it. Dit bedrijf is in 2010 begonnen in een kelderkamertje en zijn nu al met ruim 100 man. Zij houden zich bezig met pensioenen en vermogens. Dit klinkt natuurlijk saai, maar gelukkig niet bij hun. Zij doen het op hun eigen manier. Zij zijn van mening dat het anders moet met lage kosten, begrijpelijke producten en lekker hard rennen voor je klant. Ze hanteren een open en frisse cultuur, lekker informeel. Met dit bedrijf krijg je

Bekijk vacature »

Junior, medior of senior .NET C# ontwikkelaar, com

Ben je als junior, medior of senior .NET ontwikkelaar op zoek naar een analytische omgeving? Waar hoogopgeleiden en ervaren collega’s jouw kennis naar een hoger niveau kunnen tillen? Waar je met een leuk team samen aan innovatieve producten werkt? Dan zou de deze organisatie wel eens goed bij je kunnen passen. Voor een organisatie in Delft zoeken we momenteel een junior, medior of senior .NET C# ontwikkelaar. De organisatie richt zich zowel op websites als complexe maatwerk applicaties voor externe klanten. Tevens moet je (afhankelijk van je niveau) mee kunnen denken met functionele en architectonische vraagstukken. De projecten kunnen erg

Bekijk vacature »

Medior PHP Developer met passie voor drukwerk!

Vacature Omschrijving Dit innovatieve media bedrijf biedt haar relaties professionele ondersteuning bij publishing en communicatie activiteiten. Ze bestaan al sinds 1955 en zijn een grote speler in regio Zuid Holland. De organisatie is een kop loper op het gebied van maatschappelijk en duurzaam ondernemen. De klanten en de markt staan centraal en dit is waarom dit bedrijf toonaangevend is in de regio. Functieomschrijving Je gaat individueel werken als senior PHP developer aan projecten voor de vaste klanten. De projecten zijn heel divers, want er word samengewerkt met allerlei soorten bedrijven. De zaken gaan goed en hierdoor is er een constante

Bekijk vacature »

ASP.NET Developer Transformatie 35+ vrije dagen

Functieomschrijving Ben jij een ASP.NET Developer en wil jij meer doen dan alleen developen? Ben jij ondernemend ingesteld en denk jij graag mee aan de visie en strategie van een organisatie? Dan is deze baan wat voor jou! Meedenken in de visie en strategie van de organisatie; Concepten ontwikkelen en deze uitdragen binnen de organisatie; Applicaties optimaliseren in ASP.NET; Innovatieve software ontwikkelen met onder andere AngularJS; Functie-eisen HBO werk- en denkniveau; 1 tot 4 jaar ervaring met bijvoorbeeld: ASP.NET, .NET of Java; 1 tot 4 jaar ervaring met: AngularJS of andere JavaScript versies; Bekend met Agile werken; Affiniteit met ondernemen.

Bekijk vacature »

Medior Full-stack .NET Developer

Eén van onze partners in de regio Weert is opzoek naar een full stack developer om hun team te versterken. Hebben robots altijd jouw interesse gehad? Dan is dit de vacature voor jou! Organisatie Wat ooit opgezet is als een eenmanszaak vanuit een idee van de eigenaar, is inmiddels uitgegroeid tot één van de technische wereldleiders op het gebied van automatiseringsoplossingen. Tijdens zijn studententijd is de eigenaar bezig geweest met het bouwen van zijn eigen robotica. Dit idee besloot hij op de markt te gaan zetten en zo heeft hij in 2008 bedacht. Waar voor velen de recessie in 2009

Bekijk vacature »

Senior PHP ontwikkelaar met oog op lead rol

Bedrijfsinfo Deze organisatie is gevestigd in Eindhoven en telt zo’n 50 medewerkers. Zij leveren maatwerk web oplossingen voor een aantal grote klanten waarbij je kan denken aan bekende energieleveranciers, maar ook aan kleinere klanten. De projecten zijn erg divers en je kan ervan uitgaan dat er veel mensen mee in aanraking komen. Ondanks de grote klanten en de bekende namen zijn de lijnen binnen deze organisatie nog erg kort en voelt het nog altijd aan als een klein bedrijf. Er heerst een informele sfeer en er worden regelmatig bedrijfsborrels georganiseerd. Het is een erg open organisatie en dat is ook

Bekijk vacature »

Junior C# developer

Creatieve junior C#-developer gezocht in Amersfoort Dit in Amersfoort gevestigde bedrijf maakt wat anderen niet kunnen. Deze organisatie is niet alleen gespecialiseerd in het bouwen van applicaties en systeemintegraties. Ze verwerken en verzamelen ook nog eens data die hun klanten kunnen gebruiken voor diverse interne en externe processen. Dit levert het bedrijf een bijzondere luxepositie op, die heeft geleid tot groeiplannen voor de nabije toekomst. Als developer kom je terecht in een informele organisatie met korte lijnen. Het hechte team waar je deel van uitmaakt, luncht bijvoorbeeld gezamenlijk. Ook ga je regelmatig met de hele organisatie op pad om samen

Bekijk vacature »

Medior PHP developer / Online dienstverlening

Organisatie Voor onze klant in Amsterdam zijn wij opzoek naar een Medior PHP developer die hier het productteam van 20 ambitieuze developers komt versterken. Naast dat jij hier aan de slag zult gaan als developer, zal jij je thuis gaan voelen binnen dit gave bedrijf met een hecht team. Dit bedrijf is in de afgelopen 5 jaar flink gegroeid en niet meer weg te denken van het internet. Naast dat zij werken aan een goed onlineproduct, zorgen zij ervoor dat het zo gebruikersvriendelijk, veilig en transparant mogelijk is voor de koper. De IT is hier de core business en daarom

Bekijk vacature »

Medior PHP ontwikkelaar

Bedrijfsinfo Voor een informele organisatie die zich richt op onder andere webdevelopment met name binnen de sociale sector ben ik op zoek naar een medior PHP developer. Binnen deze organisatie krijg je veel vrijheden maar wordt ook veel van je gevraagd! Ze werken voornamelijk aan webapplicaties ter ondersteuning van de sociale sector waarbij de focus ligt op hoogstaande kwaliteit, veiligheid en langdurige samenwerkingsverbanden met het oog op een gestage groei van de organisatie. Functie-omschrijving Je komt te werken in een team van 5 ontwikkelaars en een designer. Binnen dit team draag je veel verantwoordelijkheid voor jouw projecten. Een klein onderdeel

Bekijk vacature »

Frontend ontwikkelaar

In jouw studententijd heb jij altijd dat beetje extra gegeven. Was het geen honours class, dan waren het wel relevante commissies of was jij gewoon heel goed in wat je deed. Tijdens je studie heb jij laten zien dat jouw passie bij ICT ligt en dat je energie krijgt om hier met leeftijdgenoten over te sparren. Of dit nu binnen-, of buiten de studie was in de vorm van eigen projecten. Dit bedrijf is gelegen in regio Amsterdam en is gespecialiseerd in dashboarding software. Bij binnenkomst wordt je verwelkomt door een warme, industriële sfeer. Het bedrijf telt 25 developers die

Bekijk vacature »

Medior PHP Team Lead

Organisatie Het bedrijf is nu bijna 20 jaar geleden ontstaan om de brug te slaan tussen de autodealer en het internet. Dat doen ze door het bouwen van webshops, een online leadgeneratie module en zelfs een tool om bijvoorbeeld een auto op de website mee te kunnen configureren! Het team bestaat nu uit 12 personen die op één gezamenlijke locatie waar een gezellige informele sfeer hangt. Er is een pooltafel, een dartbord en wat lekkere banken om te kunnen chillen. Het team gaat ook regelmatig met elkaar uit eten of andere gezellige uitjes. Functie Binnen het team zal je werken

Bekijk vacature »
Ozzie PHP

Ozzie PHP

27/08/2012 17:03:12
Quote Anchor link
Zomaar eens een vraagje.

Soms heb je een class met allerlei get functies:

getId()
getUsername()
getFirstName()
getLastName()
getAge()
getPhoneNumber()
getMailAddress()
getCity()
getCountry()

... en ga zo maar door.

We gebruiken al die get functies omdat we onze properties private willen houden, en we willen voorkomen dat iemand van buitenaf de properties kan wijzigen. Maar nu zat ik me dus af te vragen... Waarom niet 1 get functie en dan als volgt gebruiken...

get('id')
get('username')
get('firstname')
get('lastname')
get('age')

enzovoorts...

Dan heb je nog maar 1 get functie nodig! Voor- / nadelen?
 
PHP hulp

PHP hulp

22/08/2019 23:09:54
 
John Berg

John Berg

27/08/2012 17:14:50
Quote Anchor link
We hebben hier ook lang geworsteld met de Getters/Setters. Uiteindelijk maken al die functies je domein er ook niet leesbaarder op.

De C# oplossing (die in php 5.5 of 6 waarschijnlijk gaat komen) is natuurlijk de ultieme oplossing.

Wat voor ons het kortste in de buurt komt is het volgende:
Domain properties waar verder niets mee gebeurt maken we public.
Waar wel iets mee moet gebeuren lossen we op via de magic __get/__set in een basisklasse:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class BaseClass
{
  public function __get( $name )
  {

    if( method_exists( $this, 'Get' . $name ))
      return $this->{'Get' . $name}();
    else
      trigger_error ( "Getter for $name does not exists" );
  }

  
  public function __set( $name, $value )
  {

    if( method_exists( $this, 'Set' . $name ))
      $this->{'Set' . $name}( $value );
    else
      trigger_error ( "Setter for $name does not exists" );
  }
}

?>


In alle gevallen kun je dus $model->Waarde gebruiken, terwijl er toch een getter/setter aangeroepen wordt. Zo kun je b.v. ook heel gemakkelijk lazy loading implementeren. Of readonly properties.

voorbeeld
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Blog extends BaseClass
{
  private $_categories;

  public $BlogId;
  public $Content;
  public $Created;
  
  public function GetCategories()
  {

    if( !$this->_categories )
      $this->_categories = new Categories();
    
    return $this->_categories;
  }
}

?>



my 2 cents ...
Gewijzigd op 27/08/2012 17:17:55 door John Berg
 
Erwin H

Erwin H

27/08/2012 17:36:35
Quote Anchor link
Ozzie PHP op 27/08/2012 17:03:12:
Dan heb je nog maar 1 get functie nodig! Voor- / nadelen?

Het grote nadeel: je hebt geen apart voorgedefinieerde methodes meer. Daarmee verlies je de hulp van code completion en (op langere termijn) als het niet goed gedocumenteerd is het overzicht van welke properties allemaal wel en niet ophaalbaar zijn.

Voordeel: het scheelt enorm veel code en je bent veel flexibeler.

Het voorbeeld van John vind ik er een beetje tussenin. Of het veel voordelen heeft vraag ik me een beetje af, want je moet nog steeds alle getters/setters schrijven.

Mijn antwoord op wat je moet doen: geen :-)
De ene keer maak ik wel getters/setters, de andere keer via een magic methode of een algemene functie zoals je die zelf ook voorstelt. Mijns inziens is er niet een algemeen 'beste' methode.
 
Wouter J

Wouter J

27/08/2012 17:44:53
Quote Anchor link
Het nadeel wat je dan heb, met 1 get method werken, is dat je dus 1 functie hebt die dan alle verantwoordelijkheid opzich neemt voor het teruggeven van properties. Dit vind ik net iets teveel voor 1 method. Daarom zul je dan weer het moeten splitten in verschillende methods en je komt dan ong. op jou eerste uit, alleen heb je het dan zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
class User {
    // ...

    public function get($property)
    {

        return $this->get{ucfirst($property)}(); // weet niet of dit helemaal mogelijk is...
    }

    private function getName()
    {

        return ucwords($this->name);
    }


    private function getCountry()
    {

        return $this->country;
    }


    // ...
}

$user = new User();
$user->set('name', 'Wouter'); // sets name
echo 'Hallo '.$user->get('name'); // gets name
?>


Of je doet iets als jQuery doet, dat lijkt het meest op de C# oplossing die in PHP gaat komen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
class User
{
    // ...

    public function name()
    {

        if (1 == func_num_args()) {
            // handles setter
            $arguments = func_get_args();
            $this->name = $arguments[0];
            /* of vanaf PHP5.4
            $this->name = func_get_args()[0]; */

        } else {
            // handles getter
            return $this->name;
        }
    }


    // ...
}

$user = new User();
$user->name('Wouter'); // sets name
echo 'Hallo '.$user->name(); // gets name
?>


En mocht je niet weten wat die C# oplossing is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class User
{
    public $name {
        get { return $this->name; }
        set { $this->name = ucfirst($value); }
    };
}


$user = new User();
$user->name = 'Wouter'; // sets name
echo 'Hallo '.$user->name; // gets name
?>
Gewijzigd op 27/08/2012 17:46:19 door Wouter J
 
Kris Peeters

Kris Peeters

27/08/2012 17:48:36
Quote Anchor link
Het lijkt me ook dat je gewoon beide kan doen (EDIT: Een voorbeeld zie je bij Wouter, die me voor was).
Houd de gewone getters en setters.
Dan is er niemand die je tegenhoudt om een extra functie 'get' te hebben die het getten en setten groepeert.

Nu, vraag jezelf dit toch eens af:

voor wie doe je het? Voor de persoon die de class schrijft of voor de persoon die de class gebruikt?
Gewijzigd op 27/08/2012 17:51:58 door Kris Peeters
 
John Berg

John Berg

27/08/2012 17:49:19
Quote Anchor link
@Erwin: het is nu net niet de bedoeling om alle getters/setters te schrijven. Alleen die waar je iets bijzonders mee wil (lazy loading, readonly, iets doen als er iets geset wordt). Dus mijn domains zijn toch heel redelijk 'clean'.

n.b. als het property bestaat worden de magic __get/__set niet aangeroepen.
Gewijzigd op 27/08/2012 17:53:18 door John Berg
 
Erwin H

Erwin H

27/08/2012 18:07:19
Quote Anchor link
@John, waarschijnlijk begrijp ik je dan verkeerd (of je code).
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
 public function __get( $name )
  {

    if( method_exists( $this, 'Get' . $name ))
      return $this->{'Get' . $name}();
    else
      trigger_error ( "Getter for $name does not exists" );
  }

?>

Hieruit maak ik op dat alleen de properties die daadwerkelijk een getter hebben (gecontroleerd via de method_exists call) een return waarde kunnen krijgen. Alle andere leveren een error op. Dus, zo concludeer ik, alleen als er toch nog een aparte getter is geschreven voor de property kan je ophalen.

Maar graag uitleg als ik dit dus verkeerd zie.
 
Ozzie PHP

Ozzie PHP

27/08/2012 18:08:05
Quote Anchor link
Kris Peeters op 27/08/2012 17:48:36:
Nu, vraag jezelf dit toch eens af:

voor wie doe je het? Voor de persoon die de class schrijft of voor de persoon die de class gebruikt?

In eerste instantie voor mezelf. Op een gegeven moment krijg je zoveel getters dat ik me afvraag of het niet handiger kan... of beter gezegd, handiger MOET!

Het is inderdaad wel lastig dat je dan geen aparte functie meer hebt die automatisch door je editor wordt aangevuld. Dat is inderdaad een goede, maar het bespaart wel heel veel code. De opmerking over het niet kunnen bewerken van data had ik inderdaad even niet bij stil gestaan. Wellicht zou je dit dan al moeten regelen bij het setten?
 
Erwin H

Erwin H

27/08/2012 18:08:07
Quote Anchor link
@John nogmaals, Of begrijp ik uit je allerlaatste opmerking dat je public properties maakt?
Auw, dat doet echt pijn aan mijn ogen....
Gewijzigd op 27/08/2012 18:08:30 door Erwin H
 
John Berg

John Berg

27/08/2012 19:12:10
Quote Anchor link
@Erwin: Het is een mix. Er zijn public properties voor die dingen waar je niets bijzonders mee wil.

Als je dus schrijft $myclass->Foo en Foo is public dan wordt de __get niet aangeroepen. Zo is PHP ontworpen
Als je schrijft $myclass->Bar en Bar is geen property van $myclass dan wordt de __get aangeroepen die dan probeert $myclass->GetBar() te callen.

We vinden dat het onderstaande stukje code geen enkele meerwaarde heeft:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class Test
{
  private $_prop;

  public function GetProp()
  {

     return $this->_prop;
  }


  public function SetProp( $value )
  {

     $this-_prop = $value;
  }
}

?>


Dus, waarom zou je deze hele berg code niet vervangen door dit, wat functioneel precies hetzelfde doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
class Test
{
  public $prop;
}

?>
Gewijzigd op 27/08/2012 19:13:14 door John Berg
 
Erwin H

Erwin H

27/08/2012 19:39:12
Quote Anchor link
John Berg op 27/08/2012 19:12:10:
Als je dus schrijft $myclass->Foo en Foo is public dan wordt de __get niet aangeroepen. Zo is PHP ontworpen

Ik begrijp je nu, in eerste instantie begreep ik niet dat je bedoelde dat je public properties had. Deels misschien ook wel omdat ik daar enigszins allergisch voor ben :-)

Op zich heb je natuurlijk wel gelijk dat het simpel doorgeven van een waarde via een getter en setter weinig meer waarde heeft en dat je er een public property van zou kunnen maken. Alleen vind ik het persoonlijk niet netjes om het zo te doen. Een property is dat, het 'property' (eigendom) van een object en het object bepaalt wat ermee gebeurt. Bij mij zijn properties dus nooit public.
 
John Berg

John Berg

27/08/2012 19:47:04
Quote Anchor link
@erwin: een wat groter voorbeeld om het te verduidelijken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
class Test extends BaseClass
{
  private $_foo;
  public  $bar;
  
  protected function GetFoo()
  {

    return $_foo;
  }

  
  protected function SetFoo( $value )
  {

    $this->_foo = $value;
  }
}


// het gebruik
$test = new Test;
$test->bar = 'proef';
echo $test->bar;  // zal 'proef' laten zien

$test->foo = 'ook een proef';
echo $test->foo;  // zal 'ook een proef' laten zien
        
$test->GetFoo(); // geeft foutmelding

?>


Dus, net als in C# kun je op de "normale" wijze met properties werken. Waar niets bijzonders gebeurt, en dat is bij de meeste zo, maak je publics. Waar je iets bijzonders wil doen gebruik je de Get/Set, die echter voor de buitenwereld verborgen blijft.

Uiteraard is dit maar een tijdelijke oplossing, de echte oplossing komt met PHP 5.5 of PHP 6 (zie het voorbeeld wat Wouter gaf van C#)

We willen buiten de class zo compatible mogelijk blijven met de nieuwe aanroep vandaar.
Gewijzigd op 27/08/2012 19:52:16 door John Berg
 
Wouter J

Wouter J

27/08/2012 19:47:57
Quote Anchor link
Omdat je dan de flexibiliteit hebt om het later wel anders te doen zonder eerst de hele code aan te passen. Of wat denk je van een subklasse die wat bijzonders willen doen?
 
John Berg

John Berg

27/08/2012 19:57:31
Quote Anchor link
@wouter: idd, we implementeren zo "Lazy loading".

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class Test extends BaseClass
{
  private $_foo;
  public  $bar;
  
  protected function GetFoo()
  {

    if( !$this->_foo )
      $this->_foo = new Foo();

    return $_foo;
  }
}

?>


Hier is Foo readonly, en de subclass wordt alleen aangemaakt als Foo voor de eerste keer aangeroepen wordt.

Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
  $test
= new Test; // maakt alleen Test, maar geen Foo;

  $bar = $test->Foo; // zal object Foo aanmaken en teruggeven

  $foobar = $test->Foo; // zal object Foo teruggeven

  $test->Foo = 1; // foutmelding
?>
Gewijzigd op 27/08/2012 20:05:32 door John Berg
 



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.