[oop] factory vs constructor

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Programmeur / Developer

Voor een familiebedrijf in Doetinchem, actief in de machinebouw voor de food-sector, zijn wij op zoek naar een programmeur / developer. In deze functie ben je werkzaam in een team van 5 medewerkers. Je werkzaamheden bestaan onder andere uit het verhelderen van requirements vanuit de opdrachtgever, de klant en de afdeling ontwikkeling. Je verricht haalbaarheidsstudies en werkt specificaties uit die je afstemt met de opdrachtgever. Je ontwerpt design in software en stemt af met je collega's. De huidige vision-systemen zijn geschreven in C software, welke draait op een CUDA platform. Je schrijft en codeert software en zal gaan testdraaien. Tot

Bekijk vacature »

Back-end developer (Magento2)

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Fullstack of back-end PHP developer

Functie Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten. Het team bestaat uit 4 developers, een klein team dus met korte lijnen. Alles in 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. In het team streven ze naast de hoogst haalbare kwaliteit. Hiervoor werken ze nauw met elkaar samen en levert

Bekijk vacature »

Software Developer C# .NET

Functie omschrijving Software Developer C# .NET gezocht voor een dynamische organisatie! Ben jij net afgestudeerd of toe aan een volgende stap in je maatschappelijke carrière? Lees dan snel verder! Wij zijn op zoek naar een Software Developer die klaar is voor een nieuwe uitdaging en die een organisatie in de regio Houten wil versterken. Je werkt in deze functie aan verschillende projecten en gaat vaak op bezoek bij klanten. In deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid verwachten. Bedrijfsprofiel Waar kom je te werken? Je komt te werken bij een organisatie dat gespecialiseerd is in

Bekijk vacature »

SQL developer

Functieomschrijving Voor een erkende werkgever in de omgeving van Tilburg zijn wij op zoek naar een ervaren SQL ontwikkelaar. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt er als volgt uit te zien: Het ontwerpen en implementeren van databaseschema's: Je bent in staat om een database te ontwerpen en de structuur van tabellen, relaties, indexen en andere objecten te definiëren; Het schrijven van complexe SQL-query's: Je kunt complexe query's schrijven om gegevens uit de database

Bekijk vacature »

Senior PHP developer

Functie Als Senior PHP developer heb je een sterke mening over de architectuur van projecten en de processen binnen het team. Je bent de sparringpartner voor je Team Lead. Ook ondersteun je met jouw kennis de minder ervaren developers in jouw team. Ze werken regelmatig aan projecten vanaf scratch en dit geeft ruimte om voor nieuwe technieken te kiezen. Naast het ontwikkelen van software ben je continue bezig om ook jezelf te ontwikkelen. Ze werken met o.a.: PHP, Laravel, Doctrine, PHP Unit, Behat, React, TypeScript, (My)SQL, Postgress, Redis, ElasticSearch, Docker, Nginx, GIT flow, JIRA, AWS. Eisen • HBO werk- en

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je hier

Bekijk vacature »

Medior/senior Front-end developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Voor een opdrachtgever in omgeving Moordrecht zijn wij op zoek naar een programmeur. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. Je gaat technische klussen uitvoeren op locatie bij klanten. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op

Bekijk vacature »

Senior Front-end Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Front-end Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. 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

Bekijk vacature »

Software Developer C# - Deventer

Software Developer C# – Deventer Bijdragen aan de toekomst van het onderwijs! Ben jij op zoek naar een dynamische omgeving waar vol enthousiasme wordt gewerkt aan software voor interactieve dashboard- en analysetoepassingen ter verbetering van het onderwijs? Dan zijn wij het bedrijf voor jou! TIG is een bedrijf met een informele en ondernemende werksfeer, waarbij goede ideeën snel leiden tot concrete acties. Wij zijn een software ontwikkelorganisatie en focussen ons op het ontwikkelen en implementeren van oplossingen voor het leveren van managementinformatie, datavisualisatie en analyses voor het onderwijs. Met onze dashboard- en analyseoplossingen zetten scholen gegevens om naar betekenisvolle informatie.

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Ontwikkelaar Centrale Monitoring

Ontwikkelaar centrale Monitoring Functieomschrijving Wil jij een bijdrage leveren aan het onderhoud, opzetten en ontwikkelingen van technologieën van SSC-ICT, een van de grootste ICT-dienstverleners van en voor de Rijksoverheid? Je komt als monitorspecialist te werken bij team Operations Management Services. Dit team werkt aan het stabiliseren en waarborgen van een betrouwbare monitoromgeving voor 7 ministeries. Jij begeleidt het implementatieproces van de te monitoren technologieën, onder andere via management packs, connectoren en API's. Je hebt hiervoor veel contact met interne en externe klanten, die hun wensen op het gebied van monitoring aan jou doorgeven. Je beoordeelt deze wensen en komt met

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

28/12/2024 21:32:39
 
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.