[oop] factory vs constructor

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.NET developer WO niveau voor predictive software

Bedrijfsomschrijving Dit bedrijf uit Den Bosch is om precies te zijn 15 medewerkers groot en ze ontwikkelen (predicitve) planning software. Dit doen zij voor allerlei mooie en bekende organisaties (bierbrouwerijen, gemeentes, oliemaatschappijen en diverse multinationals). Wegens meer en grotere vraag vanuit de klanten komen er nu posities vrij voor onder andere een .NET developer. Het bedrijf is goed met openbaar vervoer te bereiken. Functieomschrijving Je komt hier te werken in een team van 3 .NET developers en bent betrokken bij het gehele ontwikkelproces. Dus van idee naar ontwerp en van ontwikkeling tot testen en implementatie. Bij voorkeur ben je niet

Bekijk vacature »

Back-end Developer C#

Functie omschrijving We are looking for a dutch native speaker Ben jij een ervaren back-end developer, die graag in een in-house functie wil werken? Passen de woorden innovatie, programmeren en teamspeler bij jou? Zoek niet verder en lees snel verder. Voor een echt familiebedrijf in de regio van Uden ben ik op zoek naar een back-end developer, die met name kennis heeft van C# en .NET. Jij gaat de interne applicaties verder optimaliseren en nieuwe features ontwikkelen. Verder ga je de volgende werkzaamheden uitvoeren: Ondersteunen gebruikers; Uitvoeren van analyses van de software/applicaties; Maken van functionele ontwerpen en deze door vertalen

Bekijk vacature »

Ontwikkelaar Identity & Access Management

Dit ga je doen Als Identity & Access Management Ontwikkelaar zorg jij er voor dat studenten, medewerkers en docenten de juiste benodigdheden op het juiste moment kunnen gebruiken; Het juist opslaan van onderzoeksdata en het openbaar beschikbaar stellen van publicaties (Open Access); Studenten, collega's en wetenschappers ondersteunen; Agile en Scrum werken; Technisch Applicatiebeheer; Ontwikkelen in One Identity Manager en VB.NET. Hier ga je werken Als Ontwikkelaar kom je terecht in een hecht team die zich richt op wetenschappelijke informatie en ICT. Jij bent degene die er voor zorgt dat alle informatie, uit diverse onderzoeken, bij de juiste personen terecht komt.

Bekijk vacature »

.NET developer

Functie Als senior .NET ontwikkelaar en aankomend lead developer ben jij in één van de drie development teams verantwoordelijk voor het volgende: • Jij hebt een oogpunt op modernisering en bent verantwoordelijk voor de technische staat en architectuur van de applicatie; • Jij bent verantwoordelijk voor het reviewen van de technische haalbaarheid van verschillende onderwerpen; • Jij bent verantwoordelijk voor een goede aansluiting binnen het multidisciplinaire team en de bijbehorende taken; • Jij bent verantwoordelijk voor het aandragen van verbetervoorstellen en ontwikkelstandaarden in zowel de techniek als architectuur; • Jij bent meewerkend voorman en ondersteunt en coacht jouw team op

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Web Application Developer

Dit ga je doen Samen met het team werk je aan de visualisatie functionaliteiten en hoe dit gebruikt kan worden in een operationele setting; Het ontwerpen, ontwikkelen, onderhouden en leveren van support betreft het Warehouse Management Systeem en de bijbehorende web visualisaties; Je gebruikt hierbijde tools WebGL en ASP.net; Het meewerken in implementatieprojecten; Het leveren van Go-Live Support; Sparren met jouw Amerikaanse collega's. Hier ga je werken Voor een internationale organisatie in de transport zijn wij momenteel op zoek naar een Web Application Developer. Ze zijn wereldwijd de grootste speler en lopen voorop met het automatiseren van alle processen van

Bekijk vacature »

Developer Front-end

Functie omschrijving Front-end Developer gezocht! Wij zijn op zoek naar een front-end developer voor een organisatie in de regio Veenendaal die de eindverantwoordelijkheid op zich neemt van alles wat met design te maken heeft. Je hebt in deze functie een adviserende rol hiervoor moet je beschikken over een grote dosis vakinhoudelijke kennis. Je creëert unieke concepten door samen met collega’s en klanten te overleggen over aangeleverde designs. Hiermee draag jij je steentje bij aan de groeiambities van de klant. Jij wordt het vaste aanspreekpunt voor klanten wanneer het gaat over planningen, hierin is het jouw taak om alle betrokkenen goed

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET ontwikkelaar start jij in een ontwikkelteam met 7 .NET developers. In ons team werken er drie senior .NET developer, twee medior .NET developers en twee junior .NET developers. Er is dan ook genoeg senioriteit in ons team om jou te kunnen bieden wat jij nodig hebt! Wij werken in scrum en hebben drie wekelijkste sprints. Daarnaast doen wij minimaal vier keer per jaar een release. Ons platform is ontzettend complex en groot. Het is dan ook in het begin belangrijk dat jij de processen gaat begrijpen. Jij krijgt dan ook een cursus om beter te begrijpen

Bekijk vacature »

C# .Net Developer

Dit ga je doen Het bouwen van Api's; Nieuwe oplossingen bouwen met C# .Net; De huidige software uitbouwen met C# .Net; Meewerken in projecten; Meedenken aan de toekomstplannen en verbeteringen; Onderdeel van het Scrum Team. Hier ga je werken Onze klant is een dienstverlenende organisatie voor diverse soorten organisaties in Nederland. Ze zijn van oorsprong een familiebedrijf en er is een open cultuur. Ze zijn vooruitstrevend op IT gebied en hebben een eigen inhouse development team van circa 11 man. Je komt hier te werken in het subteam .Net Core. Hier werken ze volgens scrum met de nieuwste technieken en

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

Bekijk vacature »

Full stack developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Software Ontwikkelaar PHP gezocht! Wij zijn op zoek naar een ervaren PHP Software Ontwikkelaar om het team van onze opdrachtgever te versterken! De ideale kandidaat zal fungeren als verlengstuk van klanten en complexe technische vraagstukken met enthousiasme benaderen. Naast het werken met de nieuwste technologieën, ben je in staat om aan meerdere projecten tegelijkertijd te werken. Als je deze uitdaging aangaat, werk je nauw samen met front-end developers en draag je bij aan het realiseren van grote veranderingen bij klanten. Het bedrijf zoekt iemand die zichzelf graag uitdaagt en altijd streeft naar het leveren van de beste resultaten.

Bekijk vacature »

Front-End Developer

As a Front-End Developer at Coolblue you improve the user-friendliness of our webshop for millions of customers. How do I become a Front-End Developer at Coolblue? As a Front-End Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present these within the team. You also take pride in your work and welcome any feedback. Would you like to become a Front-End Developer at Coolblue? Read below if the job suits you. You

Bekijk vacature »

APEX Ontwikkelaar in een team van Oracle Developer

Bedrijfsomschrijving Wij zijn op zoek naar een APEX Ontwikkelaar om onze opdrachtgever in Den Haag te versterken. In deze rol zul je verantwoordelijk zijn voor het ontwikkelen en onderhouden van de front-end van onze applicaties met behulp van Oracle Application Express (APEX). Je werkt aan zowel inhouse als externe projecten. De sfeer binnen het Oracle team is gemoedelijk en men probeert elkaar te helpen én van elkaar te leren. Zo ontstaat er een prettige en plezierige werksfeer waar ruimte is voor persoonlijke ontwikkeling en groei. Er wordt gewerkt met de meest nieuwe technologieën waardoor je kennis up-to-date blijft. Het bedrijf

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

07/03/2014 18:05:56
Quote Anchor link
Ola,

In een ander topic zegt Wouter op een gegeven moment:

Wouter J op 02/03/2014 16:08:06:
allereerst zou ik geen setters gebruiken voor id en value. Dat zijn verplichte waarden, geef die dus mee aan de constructor en nog mooier: gebruik een factory: Session::create('user', 'Ozzie')

Waarom zou je een factory gebruiken ipv een constructor?

Waarom...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$session
= Session::create('user', 'Ozzie');
?>

en niet...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$session
= new Session('user', 'Ozzie');
?>

Wat is het verschil/voordeel?
 
PHP hulp

PHP hulp

27/05/2026 10:55:58
 
Simo Mr

Simo Mr

07/03/2014 19:22:41
Quote Anchor link
Hey Ozzie,

Als je beginner bent dan adviseer ik je altijd eenvoudig te programmeren.

Gebruik Object-oriented concept en namespace die zijn belangrijk.

Factory design is echt niet dat belangrijk voor een beginner.

Factory design is gebaseerd op een eenvoudig princiep.
Net als een fabriek dat maakt verschillen producten.

Het kan een global fabriek of meerder sub fabrieken.
Dus een factory is een class dat bestaat uit meerder static methoden die creëren objecten en geven die objecten terug.
Bijv.
$Session = $Factory::creatSession('user', 'Ozzie');
$Auto = $Factory::creatProduct( ‘auto’);
….

Het kan ook heel global zijn
$Session = $Factory::creat('user', 'Ozzie');
$Auto = $Factory::creat( ‘auto’);

P.S
$session = Session::create('user', 'Ozzie');
respecteert niet de Factory design.
Gewijzigd op 07/03/2014 19:25:17 door Simo Mr
 
Ozzie PHP

Ozzie PHP

07/03/2014 19:31:34
Quote Anchor link
>> P.S
$session = Session::create('user', 'Ozzie');
respecteert niet de Factory design.

Maar dat is dus ook mijn vraag...

Waarom zou je dit doen

$session = Session::create('user', 'Ozzie')

in plaats van dit?

$session = new Session('user', 'Ozzie');
 
Simo Mr

Simo Mr

07/03/2014 19:40:37
Quote Anchor link
oke.

Hier is een simpel voorbeeld zonder factory design.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
if (class_exists('auto') && class_exists('motor') && class_exists('wielen') ) {
$wielen= new wielen();
$motor= new motor();
$auto = new auto($motor, $wielen);
}

met factory design

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
public static function creat($nameObject) {

if($nameObject=='auto') $this->creatAuto();
}

private function creatAuto() {
if (class_exists('auto') && class_exists('motor') && class_exists('wielen') ) {
$wielen= new wielen();
$motor= new motor();
return new auto($motor, $wielen);
} else {
 die('fatal error, class not exist ');
}
}


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$auto = factory::creat('auto');
Gewijzigd op 07/03/2014 19:51:06 door Simo Mr
 
Ozzie PHP

Ozzie PHP

07/03/2014 19:52:12
Quote Anchor link
Maar in het voorbeeld hierboven, waarom zegt Wouter daar "en nog mooier: gebruik een factory: Session::create('user', 'Ozzie')"? Weet jij waarom hij dat mooier vindt? Ik zie het voordeel niet.

Wat betreft jouw voorbeeld... als je een autoloader gebruikt heb je zoiets toch niet nodig?

Ik dacht dat factory's vooral bedoeld waren om een object te maken met een bepaalde configuratie, zodat je dat niet telkens hoeft te herhalen.
 
Simo Mr

Simo Mr

07/03/2014 19:53:10
Quote Anchor link
Dus alle die controles en error detectie... worden in factory gemaakt!

Toevoeging op 07/03/2014 19:57:08:

Ja! je kan dat met een autoloder gebruiken.
de bedoeling van factory is dat je alle soort objecten met een object can maken.


Toevoeging op 07/03/2014 20:01:29:

Hier is een uitleg met een voorbeeld.

http://www.phptherightway.com/pages/Design-Patterns.html
Gewijzigd op 07/03/2014 20:05:49 door Simo Mr
 
Ozzie PHP

Ozzie PHP

07/03/2014 20:11:25
Quote Anchor link
In het voorbeeld in de link die jij geeft staat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
class AutomobileFactory
{
    public static function create($make, $model)
    {

        return new Automobile($make, $model);
    }
}

?>

En dan...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$veyron
= AutomobileFactory::create('Bugatti', 'Veyron');
?>

Wat is het verschil als ik gewoon dit doe:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$veyron
= new Automobile('Bugatti', 'Veyron');
?>

Ik zie het nut niet zo eigenlijk.
 
Dos Moonen

Dos Moonen

07/03/2014 20:14:50
Quote Anchor link
Waarom Wouter het factory pattern aanhaalde weet ik niet.

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
29
30
31
32
33
34
35
36
37
38
<?php

final class Model {

  private static $factories = array();

  public static function create($model, ...$params) // PHP 5.6 variadics
  {
    $model = strtolower($model);

    if ( ! isset(self::$factories[$model]))
      throw new InvalidArgumentException('no factory found');

    $factory = self::$factories[$model];

    return $factory::create(...$params); // PHP 5.6 variadics
  }

  public static function register($model, $factory)
  {

    if ( ! is_string($factory) || ! method_exists($factory, 'create'))
      throw new InvalidArgumentException('invalid factory');

    self::$factories[strtolower($model)] = $factory;
  }
}


// use namespace statements

Model::register('User', User::class);
Model::register('Profile', Profile::class);
Model::register('Game', Game::class);

// ander bestand

$user = Model::create('User', 42, 'Darsstar');

?>


Met een factory maak je een object aan van een onbekende class. Vaak weet je wel dat het een bepaalde interface implementeert, of een class X is of als parent heeft. Maar zeker weten welke class doe je vaak niet.
 
Simo Mr

Simo Mr

07/03/2014 20:23:53
Quote Anchor link
Dat voorbeeld is erg eenvoudig.

Soms het maken van een object bestaat uit veel stappen.
In plaats dat je dat herhaaldelijk doet elke keer als je een object wil maken.
Doe je dat een keer in jouw Factory class.
Gewijzigd op 07/03/2014 20:24:26 door Simo Mr
 
Ozzie PHP

Ozzie PHP

07/03/2014 20:24:28
Quote Anchor link
Ah oke... dat is inderdaad een andere, meer zinvolle, interpretatie. Volgens mij kun je dit soort dingen ook oplossen met een servicecontainer?

Hoe dan ook snap ik nog steeds niet waarom Wouter in het genoemde voorbeeld een factory "mooier" noemt, want in het betreffende geval zie ik geen meerwaarde ten opzichte van het aanmaken van een object en het meegeven van de argumenten aan de constructor.

Toevoeging op 07/03/2014 20:26:39:

>> Soms het maken van een object bestaat uit veel stappen.
In plaats dat je dat herhaaldelijk doet elke keer als je een object wil maken.
Doe je dat een keer in jouw Factory class.

Ja, maar in het voorbeeld wat Wouter geeft, is dit toch niet van toepassing?
 
Simo Mr

Simo Mr

07/03/2014 20:36:32
Quote Anchor link
Wat wouter bedoelt is een soort of embedded Factorization.

maar hier is een class diagram van de factory pattern

Afbeelding
Gewijzigd op 07/03/2014 20:36:43 door Simo Mr
 
Ozzie PHP

Ozzie PHP

07/03/2014 20:44:32
Quote Anchor link
>> Wat wouter bedoelt is een soort of embedded Factorization.

Maar dat voegt in dit geval toch niks toe ten opzichte van $session = new Session('user', 'Ozzie') ? Of zie ik iets over het hoofd?
 
Simo Mr

Simo Mr

07/03/2014 21:04:45
Quote Anchor link
Nee, het is beter dan $session = new Session('user', 'Ozzie').

De constrictor van Session create een nieuwe session voor de gebruiker Ozzie.

Als die session al bestaat dan kan je beter dat checken met die static functie voor dat je helemaal een ojbect gaan creëren en opnieuw die session gaan initialiseren.

$session = new Session('user', 'Ozzie') creëert altijd een object.

$session = $Factory::creat('user', 'Ozzie'); check of dat session al bestaat als niet creëert een new.
 
Ozzie PHP

Ozzie PHP

07/03/2014 21:08:38
Quote Anchor link
Nu wordt het vreemd. Jij zegt dus dat een factory een bestaand object teruggeeft als dat object al bestaat?
 
Simo Mr

Simo Mr

07/03/2014 21:44:00
Quote Anchor link
Dat kan, maar niet altijd (bijv. session objecten hoeven een keer gecreëerd worden)
Als je al een session geïnitialiseerd hebt dan waarom ga je dat opnieuw starten!.
 
Ozzie PHP

Ozzie PHP

07/03/2014 21:48:22
Quote Anchor link
De session wordt niet opnieuw gestart. Het zijn losse key->value paren waar een class omheen wordt gebouwd. Waarom weet ik overigens ook niet.
 
Wouter J

Wouter J

08/03/2014 11:35:18
Quote Anchor link
Simo, 1 factory die precies weet hoe ALLE services aangemaakt moeten worden? Dat gaat volkomen tegen het SOLID (voornamelijk de SRP) principe in...

Factories bestaan er in 2 smaken:
- Factory class
- Factory method

In het geval van een klasse heb je een bepaalde klasse, 1 per object type, die weet hoe hij iets aanmaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$audi
= AudiFactory::createCar(new Tyres('Pirelli'), new Engine('V8'));
?>


In dit geval is het gebruik van een Factory class alleen maar duidelijk, een auto maakt zichzelf niet, de fabriek maakt de auto. In de meeste gevallen is dit echter een beetje overdone, dan is een Factory method genoeg.

Het Factory Method pattern gebruik ik echter wel veel. Wat we hierboven in de code voor problemen hebben:
- Strict genomen create ik geen auto, ik assemble een auto. Tyres en Engines manufacture ik.
- We hebben nu 1 object: Tyres die voor alle soorten banden werkt. Beter is hier bepaalde kwaliteiten van een band in te stellen doormiddel van het Strategy pattern. Zelfde geldt voor de motor.

Een mooiere code zou dan zijn:
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
<?php
$audi
= AudiManufactory::assemble(Tyres::manufacture('pirelli'), Engine::assemble('V8'));

class Tyres
{
  pub static func manufacture($type)
  {

    $tyre = new Tyres();
    switch (strtolower($type)) {
      case
'pirelli':
        $tyre->milesBeforeWear(2000)->...;

      // ...
    }
  }
}

?>
 
Ozzie PHP

Ozzie PHP

08/03/2014 13:06:48
Quote Anchor link
Wouter, maar waarom wil je in het voorbeeld met de Session class een factory gebruiken? Jij zegt omdat dat mooier is, maar waarom vind je het dan mooier?
 
Wouter J

Wouter J

08/03/2014 13:15:23
Quote Anchor link
Nou hier zie je al een duidelijk voorbeeld. Je wilt niet telkens al je initialzations aanpassen omdat je de constructor wat aanpast of omdat je wat andere waardes verwacht bij initialize. Je wilt maar 1 plek hoeven aanpassen.
 
Ozzie PHP

Ozzie PHP

08/03/2014 18:50:21
Quote Anchor link
>> Je wilt niet telkens al je initialzations aanpassen omdat je de constructor wat aanpast of omdat je wat andere waardes verwacht bij initialize.

Ik snap nog steeds niet wat je bedoelt eerlijk gezegd. Kun je een (pseudo) code voorbeeldje geven?
 
Dos Moonen

Dos Moonen

08/03/2014 20:07:14
Quote Anchor link
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php

##########################
#   2014's Session.php   #
##########################


class Session {

  private static $request;

  public static function request(Request $request = null) {
    switch (func_num_args()) {
      case
0:
        return static::$request;
      break;
      case
1:
        static::$request = $request;
      break;
    }
  }


  public static function create($key =  FALSE, $value = FALSE) {
    $args = func_get_args();
    $array = array();

    while (FALSE !== ($key = next($args)) && FALSE !== ($value = next($args))) {
      $array[$key] = $value;
    }


    $session = new static(static::request());

    foreach ($data as $key => $value) {
      $session->set($key, $value);
    }


    return $session;
  }


  public function __construct(Request $request) {
    // ...
  }

}


##########################
#   2015's Session.php   #
##########################


class Session {

  private static $request;

  public static function request(Request $request = null) {
    switch (func_num_args()) {
      case
0:
        return static::$request;
      break;
      case
1:
        static::$request = $request;
      break;
    }
  }


  // NEW!
  private static $driver;

  // NEW!
  public static function driver(Session\Driver $driver = null) {
    switch (func_num_args()) {
      case
0:
        return static::$driver;
      break;
      case
1:
        static::$driver = $driver;
      break;
    }
  }


  public static function create($key =  FALSE, $value = FALSE) {
    $args = func_get_args();
    $data = array();

    while (FALSE !== ($key = next($args)) && FALSE !== ($value = next($args))) {
      $data[$key] = $value;
    }


    $session = new static(static::request(), static::driver());

    foreach ($data as $key => $value) {
      $session->set($key, $value);
    }


    return $session;
  }


  // CHANGED!
  public function __construct(Request $request, Session\Driver $driver) {
    // ...
  }

}


############################
#   2014's FourtyTwo.php   #
############################

// Works!

$session = new Session($request);
$session->set('ford', 'prefect');
$session->set('marvin', 'the paranoid android');

// ...

// Works!

$session = Session::create('ford', 'prefect', 'marvin', 'the paranoid android');



############################
#   2015's FourtyTwo.php   #
############################

// Broken!

$session = new Session($request); // error...
$session->set('ford', 'prefect');
$session->set('marvin', 'the paranoid android');

// ...

// Works!

$session = Session::create('ford', 'prefect', 'marvin', 'the paranoid android');

?>
Gewijzigd op 08/03/2014 20:08:26 door Dos Moonen
 

Pagina: 1 2 volgende »



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.