get

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C# developer, technische omgeving, Westland

Ben je een ervaren C# developer en op zoek naar een technische omgeving? Een baan met afwisseling waarbij je niet alleen achter je scherm bezig bent met code kloppen? Binnen een bedrijf met korte lijnen en een informele sfeer? Voor een bedrijf in het Westland zijn we op zoek naar een technische software ontwikkelaar. Het bedrijf richt zich op technische maatwerk systemen voor in de tuinbouw. Denk hierbij aan de ontwikkeling van besturingssoftware en beeldherkenningssoftware ter aansturing van robotica. Het werk omvat veel afwisseling; niet alleen programmeren, maar ook het ontwerp en het in bedrijf stellen bij klanten. Het gaat

Bekijk vacature »

Senior PHP Developer BDD Zorg

Functieomschrijving Ben jij een PHP Developer die out of the box denkt? Zoek jij naar de mogelijke als naar de onmogelijke oplossingen? Werk jij graag met kritische vraagstukken dat mensenlevens kan redden of kosten? Reageer nu en kom alles te weten! Ben jij iemand die energie krijgt van het ontwikkelen van een complexe PHP objectgeoriënteerde platform; Denken jij graag mee over de architectuur; Geeft een mooie schone code jou energie en doe jij er alles aan dat dit zo blijft; Vind jij het net zo belangrijk dat de huidige software goed onderhouden wordt; Denk jij graag out of the box;

Bekijk vacature »

C# Backend Developer gezocht - Medior/Senior

Functieomschrijving Aangezien de behoefte die er vanuit deze organisatie is naar versterking vrij urgent is, is het belangrijk dat je al minimaal twee jaar ervaring hebt met C# voor deze functie. Je moet namelijk direct inzetbaar zijn voor de organisatie. Uiteraard heb je wel een inwerkperiode waarin je rustig de software kunt leren kennen, dat spreekt voor zich, maar daarna moet je inzetbaar zijn en je steentje bij kunnen dragen aan het development team. Zoals gezegd wordt hier gewerkt aan zowel maatwerkapplicaties, als aan standaard productpakketten. Jij komt aan alle productcategorieën te werken, wat je werk divers maakt en leuk

Bekijk vacature »

Xamarin developer gezocht, centrum Rotterdam

Ben je Xamarin developer en op zoek naar een nieuwe baan? Bij een slagvaardig en hard groeiend bedrijf met korte lijnen? In een omgeving waar je onder andere direct samen met de oprichter werkt aan het verder ontwikkelen van een vernieuwend product? Dan is deze vacature zeker iets voor jou. Voor een bedrijf in het centrum van Rotterdam (goed te bereiken met de trein) zijn we momenteel op zoek naar een Xamarin developer. Het gaat om een klein bedrijf dat op een punt is beland waar de vraag naar hun software flink toegenomen is. Hierdoor zijn ze op zoek naar

Bekijk vacature »

lead aws developer

Goedemorgen Netwerk, Momenteel ben ik op zoek naar een lead aws developer die de leiding neemt in het oplossen van ingewikkelde techniesche vraagstukken. De permanente aanstelling is uit te voeren in de omgeving van Den Haag. Wat breng je mee voor de rol van lead aws developer: Afgeronde HBO/universitaire opleiding; Minstens 5 jaar aantoonbare ontwikkel ervaring; AWS Serverless (Lambda), Glue, Python, PySpark, s3, DynamoDB, Athena, API gateway zijn voor jou geen geheim; Ervaring met databases en APIs, DevOps werken en CI/CD; Gedegen kennis van en ervaring met Agile/scrum werken; Je spreekt goed Nederlands. Wat bezorgen wij jou? Een uitdagende functie

Bekijk vacature »

.NET Developer Techniek Groeiende organisatie

Functieomschrijving Wil jij als .NET Developer in een technische omgeving werken bij een bedrijf wat een mooie groei doormaakt? Lijkt het jou gaaf om aan software & producten te werken die over de hele wereld verkocht worden? Lees dan nu verder! Als Software Developer nadenken en ontwikkelen van innovatieve (backend) software die toekomst proof is; Samen met hardware professionals nadenken over na te denken over de ideale klantoplossing; Sparren met de (interne) klanten over de wensen en eisen; Samen met het multidisciplinaire scrumteam testen uitvoeren. Functie-eisen HBO werk- en denkniveau is een sterke pre; Enige kennis van technische automatisering is

Bekijk vacature »

.NET Developer

.NET Developer De uitgebreide versie Jij hebt ruim twee jaar ervaring als developer. Nu wil je graag je tanden zetten in nog complexere projecten. Samen met je team bereik je nieuwe hoogtes en zelfstandig maak je meters. Je hebt behoefte aan collegae die jou alles leren op het gebied van technologie maar wilt tegelijkertijd ook graag je eigen opgedane kennis delen. Alles wat vandaag nog onbekend is, moet je morgen toepassen in de volgende uitdaging en dàt is wat jou scherp houdt. Je hebt geen zin in een 60-urige werkweek maar haalt wel plezier uit zo nu en dan een

Bekijk vacature »

(jr.-sr.) Support Engineers m/v (IT) (Amsterdam, C

SUPPORT ENGINEER Ben jij technisch onderlegd, klantgericht en heb je de ambitie om je op het gebied van IT verder te ontwikkelen? Dan is onze functie van Support Engineer écht iets voor jou! Wegens sterke uitbreiding zoeken wij verschillende kandidaten voor deze vacatures op verschillende kennisniveaus (junior, mid career tot senior). Wie zijn wij? NFOrce Internet Services is gespecialiseerd in het wereldwijd leveren van hosting- en internetdiensten aan particulieren en bedrijven. Lang voor ons officiële begin in april 2003, hebben wij een ongeëvenaarde waarde voor onze klanten gecreëerd -- niet door het aanbieden van een sub-standaard product tegen een lage

Bekijk vacature »

IT Support Engineer

IT Support Engineer Function description As a support engineer in our organization you are part of a team of experienced specialists that work around the clock to ensure network availability in a friendly and family like business setting. You are responsible for the daily operational tasks and answering our customers to the best of your ability to fulfill their needs and guarantee a positive healthy relationship between both companies. Along side our customers you will also be working with our partners to maintain a stable platform. Job content ¬ Monitoring our infrastructure to detect and solve problems, together with your

Bekijk vacature »

Senior (Magento) developer

Senior PHP, developer, pijnacker Functieomschrijving In de rol als senior PHP developer ben je verantwoordelijk voor het opzetten, het uitdenken, het verbeteren en ontwikkelen van de bestaande websites. Daarnaast wil je hier werken om je kennis met collega's te delen en ze te begeleiden om tot een hoger niveau te komen! Na loop van tijd zal je overstappen op een nieuw project waar je een bestaande web applicatie zal moeten herschrijven. Dit alles gebeurt volgens het MVC Framework Zend en Magento 2.0 CMS. Heb jij interesse in een complexe backend functie middels up-to-date technieken? Dan ben je hier aan het

Bekijk vacature »

SAP Fiori Developer / Junior / Internationaal / 1

Functieomschrijving Ga jij als SAP Fiori Developer aan de slag voor een internationaal bedrijf in Nederland met meer dan 1 miljoen klanten? Dit bedrijf heeft IT hoog in het vaandel staan en investeert er daarom fors in. Voor het SAP Fiori team binnen deze organisatie zijn zij dan ook op zoek naar een Junior SAP Fiori Developer Werken als SAP Fiori Developer binnen een multifunctioneel Scrum team; Het bouwen en beheren van nieuwe functionaliteiten en interfaces in SAP Fiori op basis van de door jou opgehaalde requirements; Naast het developen heb je ook veel contact met de business; Je zorgt

Bekijk vacature »

Medior/Senior C# .NET Developer; interne functie!

Functieomschrijving Je komt hier terecht in een klein ontwikkelteam, bestaande uit jouw en twee andere Senior programmeurs. Samen gaan jullie ervoor zorgen dat het CRM-systeem continu optimaal werkt, zodat alle overige werknemers van de organisatie hier ten alle tijden in kunnen en in kunnen werken. Jullie houden je bezig met bugfixing, maar ook met het ontwikkelen van nieuwe modules. Omdat jullie met zo'n klein team zijn is er sprake van hele korte lijnen. Jullie staan continu met elkaar in contact en werken nauw samen. Er is veel sprake voor eigen inbreng en je hebt veel verantwoordelijkheid. Je werkzaamheden zijn het

Bekijk vacature »

C# / .NET Developer / SiteCore

Functieomschrijving Ben jij een Developer met kennis van C# / .NET en wil jij je graag specialiseren op het gebied van Sitecore? Wil jij daarnaast werken aan uitdagende Inhouse projecten voor grote en bekende partijen in Nederland? Dan is dit de rol waarnaar jij op zoek bent! Binnen deze rol zal jij je als C# / .NET Developer (met de focus op SiteCore) aan de slag gaan voor een van de meest bekende bureaus op het gebied online platformen, een rol met veel afwisseling en voldoende technische uitdaging! Werken aan diverse en uiteenlopende projecten, waarbij je meer dan eens pionierswerk

Bekijk vacature »

Software Developer RPG

At Remain Software we develop Application Lifecycle Management solutions for the IBM i. We have customers all over the world and offices in the Netherlands and the United States. Our ALM solution TD/OMS is recognized by our customers as one of the worldwide leading solutions. Our challenge is to stay in sync with the market needs in order to meet the requirements of our customers. We are looking for an RPG software development specialist who wants to be part of our passionate team in the Netherlands. Experience in software development on the IBM i platform is a requirement. The Job

Bekijk vacature »

C# .NET ontwikkelaar gezocht, detachering (Azure,

Ben je een .NET ontwikkelaar en op zoek naar afwisseling in de regio Rotterdam? Bij een innovatief bedrijf met mogelijkheden om te groeien in zowel functie als kennis? Waar je geen nummer bent maar er aandacht is voor jou als persoon? Wellicht dat deze organisatie je dit kan bieden. Voor een detacheerder in Rotterdam zijn we namelijk op zoek naar gepassioneerde .NET ontwikkelaars. Het bedrijf heeft een regionale werkwijze waarbij ze een aantal vestigingen in Nederland hebben waaronder de hoofdvestiging in Rotterdam. Er werken momenteel circa 80 mensen. Het bedrijf is met name sterk in CRM maatwerk oplossingen en de

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

06/12/2019 05:07:27
 
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.