[oop] factory vs constructor

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior PHP Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte website die in eigen beheer zijn. In onze vestiging in Nederweert zitten onze development afdelingen en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé PHP/Back-end developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het bedenken van nieuwe functionaliteiten Het verbeteren van het

Bekijk vacature »

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel binnen als

Bekijk vacature »

Junior PHP Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Team Lead/ Lead developer gezocht (Hands-on, PHP,

Functie Als Team Lead ben je de leider van één van de ontwikkelteams binnen de organisatie. Je leidt als lead developer een goed draaiend team dat werkt aan complexe en duurzame applicaties en API’s. Vanuit je kennis en ervaring ben je in staat het grote plaatje te blijven overzien, en kritisch mee te denken over bijvoorbeeld de architectuur, maar ook de algehele aanpak binnen het project. Je laat je team niet alleen technisch goed functioneren maar ben ook betrokken bij het menselijke aspect. Zo weet jij je collega’s te motiveren en begeleiden in hun dagelijkse werk. Buiten het team ben

Bekijk vacature »

Junior .NET Software Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Oracle Apex Developer

Dit ga je doen Jouw taken bestaan uit: Het bouwen maatwerk Oracle applicaties voor Europese business units; Het implementeren van de nieuwste technieken om te blijven innoveren; Actief meedenken en aandragen van verbetervoorstellen. Hier ga je werken Deze organisatie in de regio Veenendaal is een van wereld grootste retailers met ruim 16.000 winkels in 27 markten en jaarlijks ruim 5,3 miljard klanten die winkelen bij een van hun welbekende retailmerken. Binnen de organisatie is er een IT Group actief die dient als IT Service Provider voor de hele organisatie en waar dagelijks IT'ers werken aan state-of-the-art IT oplossingen. Dit doen

Bekijk vacature »

Back end Node.js developer

Functie Het ontwikkelteam bestaat momenteel uit 5 (back-end) Developers, 2 systeembeheerders, 1 DevOps engineer, 1 Tech Lead en 2 Scrum Masters. Samen wordt er doorontwikkeld aan twee SaaS-platformen die in een hoog tempo doorontwikkeld moeten worden. Omdat innovatie een belangrijk speerpunt binnen de organisatie is, wordt er ook continu naar snellere en slimmere oplossingen te bedenken en realiseren. Als Back-end Developer hou jij je dagelijks bezig met vraagstukken zoals: API-development, high volume datastromen, het ontwikkelen van Bots aan de hand van A.I. Daarnaast denk en werk jij mee aan de onlineapplicaties voor klanten. Er wordt zelfstandig en in teamverband gewerkt

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Starter/junior PHP developer

Functie Momenteel zijn ze op zoek naar een junior PHP developer om het team te versterken. Als back-end developer bouw je de enterprise software die hun bedrijf helpt bij haar primaire processen. Afhankelijk van de omvang van het project werk je in een klein team aan een project. Ze hebben dagelijkse stand-ups en elke twee weken een scrumsessie, begeleid door de Scrum Master, waar je je ideeën kunt presenteren en samen met de Product Owner kunt werken aan het beste product. Ze vertrouwen enorm op hun eigen bedrijfssoftware. Dit geeft hun een groot voordeel ten opzichte van hun concurrentie. Zo

Bekijk vacature »

Java developer (remote)

Functie Wat ga je doen als Java Developer? Jij als Java ontwikkelaar komt te werken in 1 van onze SCRUM teams. Momenteel werken er zo’n 30 ontwikkelaars binnen onze organisatie waarbij jij de brug slaat tussen het bouwen van verschillende functionaliteiten binnen onze applicaties en deze vervolgens te integreren in onze centrale hub. Je start je dag om 9 uur met een stand up en dan pak je jouw taken op voor de dag. Hieronder een aantal taken die jij zal uitvoeren: – Het bedenken en uitbouwen van features binnen de verschillende applicaties – Onderhouden van CI/CD pipelines – Bezighouden

Bekijk vacature »

.NET Developer

Dit ga je doen Programmeren in .NET, Javascript & C# en ontwikkelen in Web Services, Windows Services en MS SQL Server; Zelfstandig verbanden maken Analyseren, testen, bugs fixen, reviewen en rapporteren; Juiste prioriteiten stellen en verantwoordelijkheid nemen; Op architectuur niveau meedenken; Af en toe klanten bezoeken. Hier ga je werken Voor onze relatie zijn wij opzoek naar een .NET ontwikkelaar met minimaal 3 jaar werkervaring. Je komt te werken in een groeiend bedrijf met betrokken collega's die zorgen voor een familiaire sfeer op de werkvloer. Als .NET ontwikkelaar word jij vanaf de eerste werkdag betrokken bij het gehele ontwikkelproces. De

Bekijk vacature »

Software Ontwikkelaar

Functieomschrijving In deze uitdagende functie als Software Developer ga je de volgende taken uitvoeren: Maatwerk back-end software programmeren; API koppelingen bouwen; Software optimaliseren voor klanten; Bouwen maatwerk applicaties; Werken met Microsoft stack zoals C#, .NET (Core) en Entity framework; Bedrijfsprofiel Je gaat werken bij een klein softwareontwikkelingsbureau, die maatwerk software bouwt voor klanten door heel Nederland. Dit doen zij al meer dan 20 jaar. Het is van oorsprong een familiebedrijf, opgezet door de eigenaar, die er nog steeds werkt. Het team bestaat vooral uit back-end developers en één systeembeheerder. Je krijgt veel kans om jezelf te ontwikkelen en krijgt tevens

Bekijk vacature »

.NET Developer Senior

Dit ga je doen Het ontwikkelen van backend applicaties in C#; Het maken van vele koppelingen met andere ERP-applicaties zoals JD Edwards en SAP; Je bent (mede) verantwoordelijk voor het opstellen van technisch ontwerpen voor de te ontwikkelen software oplossingen; Je bent gemiddeld 90% van je tijd inhouse oplossingen aan het ontwikkelen en testen. De overige 10% van je tijd ben je bij klanten op locatie om oplossingen te implementeren, klanten te begeleiden en de software verder te innoveren; Naast het zelfstandig ontwikkelen van software oplossingen ben je ook bezig met het waarborgen van je contacten bij de klant, het

Bekijk vacature »

Back-end ontwikkelaar

Functie omschrijving Wil jij meebouwen aan diverse databasesystemen in een klein bedrijf met een platte organisatie? In een team van ruim 10 ontwikkelaars wordt er aan diverse ICT oplossingen gewerkt. Jouw taken hierbij zullen bestaan uit: Het onderhouden en door-ontwikkelen van bestaande databases. Denk hierbij aan schema verbeteringen en performance-tuning. Bij nieuwe ontwikkelingen ga jij ook bezig met het bouwen van het databaseschema. Omdat je in een klein team werkt zal je ook de C# routine verder uitbouwen en ontwikkelen. Ook kan je meedraaien in algemene refactory-, ontwikkel- of testwerkzaamheden. Je zal voornamelijk gebruik maken van de volgende technieken: .NET

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP / Laravel developer zal je in een klein team terecht komen. Wij zijn op zoek naar een echte specialist, iemand die de balans weet te vinden tussen techniek en perfectie. In de aankomende jaren wilt dit bedrijf flink groeien en daarom zijn ze op zoek naar jou! Wat ga je doen? Je draagt bij aan het ontwikkelen en onderhouden van bestaande webapplicaties die boordevol functionaliteit zitten. Deze applicaties worden gebruikt door de organisatie zelf en ook door de klanten. Inmiddels wordt er gewerkt met Laravel 8 en zijn er diverse koppelingen naar externe leveranciers. Verder zal

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

24/11/2024 00:49:12
 
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.