[oop] factory vs constructor

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lead javascript developer Node.js React

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Medior PHP Developer

Functie omschrijving We are looking for a dutch native speaker Wil jij als developer werken bij een interne organisatie en de eigen software verder helpen ontwikkelen? Lees dan snel verder! In deze functie ga je werken als PHP Developer en de interne software en applicaties verder ontwikkelen. In het kort houdt dit in: Je gaat de interne applicaties en software verder optimaliseren. Verder bouw je verschillende API's en koppelingen tussen systemen. Je gaat het CRM-systeem door middel van PHP verder ontwikkelen. Ook ga je collega's ondersteunen bij vragen over de software en applicaties. Bedrijfsprofiel Dit bedrijf is actief in het

Bekijk vacature »

Frontend Developer Vue Nuxt HBO Javascript

Samengevat: Deze werkgever levert elke dag betere digitale gebruikerservaringen. Ben jij geschikt als frontend Developer? Heb je ervaring met Vue en Nuxt? Vaste baan: Front-End Developer HBO €3.100 - €4.600 Zij bieden opdrachtgevers een complete dienstverlening op gebied van ontwerpen en ontwikkelen van websites, zoekmachine optimalisatie, online adverteren, content marketing en conversie verbetering. Zij werken met een eigen ontwikkeld CMS. Bij bij hun werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe software. Wij blinken uit als het gaat om de inzet van technologie. Deze werkgever staat open voor elke nieuwe trend. Onze systemen zijn groot

Bekijk vacature »

Medior/senior Front-end developer (Vue.js)

Functie Als Front-end developer ben je uiteindelijk overkoepelend aan de slag voor de 3 ontwikkelteams die ieder aan een specifiek product werken. In samenwerking met de UX-designer en de huidige Front-end developer zorg je voor gebruiksvriendelijke software. Lijkt het jou interessant om complexe problemen op te lossen en feautures naar een hoger niveau te tillen? En vind je het niet erg om oudere delen van de applicaties te refactoren i.c.m. het toevoegen van nieuwe functionaliteiten? Dan komen wij graag met je in contact. Eisen • HBO werk- en denkniveau (ze kijken niet naar papieren, maar naar denkniveau, motivatie en zelfredzaamheid)

Bekijk vacature »

Software Ontwikkelaar .NET te Zaandam

Bedrijfsomschrijving Je komt hier terecht bij een door-en-door softwarebedrijf, waarbinnen meerdere SaaS pakketten worden ontwikkelt voor diverse sectoren. Hierbij kun je denken aan bijvoorbeeld de logistieke en medische branche. Deze organisatie kenmerkt zich door de hoge mate van complexiteit in de applicaties, wat betekent dat jij je hier niet zal gaan vervelen. Integendeel: Jij gaat hier elke dag ontzettend veel leren en je in razend tempo ontwikkelen als C# .Net Developer met focus op back-end. Het team bestaat uit ongeveer 20 personen personen, waarvan het grootste deel zich richt op software development. De sfeer is informeel en professioneel. De producten

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 »

.NET Developer

Functie omschrijving Net afgestudeerd en op zoek naar een leuke baan als developer? Zoek niet verder! Ik heb een functie beschikbaar als back-end developer, bij een leuk familiebedrijf. Je gaat werken met de Microsoft stack en de technieken C# en .NET. Verder maak je gebruik van MVC en Entity framework. SQL kent ook geen geheimen voor jou. Jouw verantwoordelijkheden: Nieuwe maatwerk software bouwen; API koppelingen bouwen; Applicaties en software optimaliseren; Back-end programmeren. Een erg uitdagende functie, met veel vrijheid. Je kan meerdere dagen thuis werken en als je op kantoor werkt wordt de lunch verzorgd. Heb je interesse, reageer dan

Bekijk vacature »

Senior Product Developer

Functieomschrijving Als senior Product Developer ben je verantwoordelijk voor bestaande mobiliteitsproducten en de ontwikkeling van nieuwe mobiliteitsconcepten. Met behulp van diverse klantonderzoeken, klantsessies en salesmeetings zorg je ervoor dat je de veranderende mobiliteitsbehoeften in de markt kent. Hier speel je op in door innovatieve, flexibele, efficiënte en duurzame vervoersoplossingen te bedenken, te ontwikkelen, te implementeren en uiteindelijk samen met Sales en Marketing collega’s in de markt te zetten. Je initieert en neemt deel aan (internationale en afdeling overschrijdende) projecten, vaak in de rol van projectleider. In die rol bewaak je de voortgang, coördineer je de activiteiten en zorg je voor

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 »

Full Stack Software Developer C#.NET

Functieomschrijving Wij zijn op zoek naar een gepassioneerde Full Stack C#.NET Software Developer. Als Software Developer ben je verantwoordelijk voor het ontwikkelen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere ontwikkelaars en engineers om de sensoren in machines uit te lezen en deze data om te zetten in management informatie voor jullie klanten. Taken en verantwoordelijkheden: Ontwikkelen en onderhouden van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Testen en valideren van de ontwikkelde software. Actief deelnemen aan code reviews en bijdragen aan het verbeteren van de kwaliteit van de software. Je gaat aan

Bekijk vacature »

Junior Front end developer

Functie Jij als developer gaat ons helpen onze producten verder te ontwikkelen en in te zetten in de markt. Op dit moment bestaat ons SaaS product uit 3 componenten die zowel los als in een pakket gekocht kunnen worden. Het gaat hier om een online kaartapplicatie, een workflow tool en een monitoring tool. Momenteel zijn wij 3 jaar geleden gestart met de ontwikkeling. De tech-stack waarmee we werken is voornamelijk Javascript, Vue.js en Python. Daarnaast gebruiken wij FaundaDB als database en werken we veel met GIS applicaties. De uitdaging die we momenteel hebben is dat we momenteel een intern team

Bekijk vacature »

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 »

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 »

Full-stack developer

Als Full-stack developer bij KUBUS houd je je bezig met het ontwikkelen van de (web)applicatie en services van BIMcollab. Samen met je SCRUM team werk je aan zowel de front- als de back-end. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein genoeg om als individuele ontwikkelaar invloed uit te kunnen oefenen en echt het verschil te kunnen maken. Ons ontwikkelteam bestaat uit ruim 40 ontwikkelaars, testers, scrum

Bekijk vacature »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn ze op zoek naar een Technische front end developer. Momenteel hun front end back end team gescheiden aan het werk. Hier willen ze verandering in krijgen. Omdat ook veel interne applicaties ontwikkeld worden zoeken ze iemand die hen kan helpen om de interne applicaties te voorzien van de juiste Vue.js componenten. Zodoende willen ze de interactie tussen front end en back end versoepelen en de volgende stap binnen het platform gaan zetten. Deze componenten die jij ontwikkeld zullen in elk project gebruikt worden. Het back end team bestaat momenteel uit 8 ontwikkelaars

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

14/05/2024 22:02:45
 
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.