[oop] Serializable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior PHP (Laravel) Developer

Functie omschrijving Wij zijn op zoek naar een PHP Laravel Developer! Sta je aan het begin van je carrière en ben je op zoek naar een leuke baan? Lees dan verder! Voor een softwarebedrijf in omgeving van Schiphol zijn wij op zoek naar een ervaren PHP (Laravel) Developer. Je gaat je bezighouden met het ontwikkelen van innovatieve bedrijfsapplicaties. Samen met het team, bestaande uit designers en developers, maak je mooie oplossingen voor bedrijven in diverse branches. Je zorgt dat de opgeleverde websites perfect werken en de klant meer dan tevreden is. Je kunt rekenen op een afwisselende baan met leuke

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Software Developer PHP JavaScript Python HBO SQL

Samengevat: Wij zijn een softwarebedrijf voor Autodealers. Ben jij een Medior of Senior Software Developer? Heb je ervaring met PHP, JavaScript of Python? Vaste baan: Java.Developer Software HBO €3.000 - €5.200 Bij ons op de werkvloer is er een positieve en informele sfeer. Naast een goede begeleiding en een enthousiaste klantenkring biedt deze werkgever een prettige omgeving met zeer afwisselende werkzaamheden. Houd jij van aanpakken en denk je dat je deze uitdaging aankunt? Dan zoeken wij jou! Zij werken voor grote klanten. Zij doen omvangrijke projecten die we bij deze werkgever op kantoor realiseren (geen detachering). Zij werken met state-of-the-art

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 »

Senior developer (PHP en VB.NET)

Functie De development afdeling bestaat uit 2 teams. Het productteam (10 developers) is verantwoordelijk voor verschillende applicaties met als doel om zoveel mogelijk te automatiseren en uit te werken tot standaard software. Met diverse Solutions Architecten en ervaren developers denken ze voortdurend mee met hun klanten en bouwen ze de basis van het uiteindelijke maatwerk dat wordt geleverd. Hiernaast hebben ze een maatwerk/projectteam. Dit team bestaat momenteel uit 8 developers (junior tot senior) en is verantwoordelijk voor het maatwerk in hun klantprojecten. Momenteel zijn ze op zoek naar een senior developer die aan de slag gaat in het productteam. Hierin

Bekijk vacature »

Technical Asset Specialist Substations

TenneT is growing fast to realize its strategic ambitions. We play a leading role in driving the energy transition. We are looking for a passionate Technical Asset Specialist for substations (onshore and offshore) at our location in Arnhem who will contribute to this and that might be you? Your contribution to TenneT We are searching for a motivated and engaged colleague as a technical asset specialist (onshore and offshore) for instrument transformers and surge arresters, with preferably a strong background in the area of insulation coordination. As a specialist for insulation coordination you are responsible for overarching topics regarding insultation

Bekijk vacature »

Back End Developer

As a Back End developer at KUBUS you will be developing the (web) application and services of BIMcollab. You have a focus on the back end of our software, for which we mainly work with C# and .NET. We use a full-stack approach, which means that in addition to the back-end, you will also help with other parts of the code. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact

Bekijk vacature »

Fullstack Software Developer

Functieomschrijving Voor een ambitieuze werkgever in regio Roosendaal zijn wij op zoek naar een Full Stack C#.NET Developer. Als software programmeur ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor de eigen IOT-oplossingen. Je werkt samen met andere developers 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: Verder ontwikkelen en onderhouden van webapplicaties, dashboards en apps voor de eigen IOT-oplossingen; Testen en goedkeuren van de software; Je gaat aan de slag met de volgende technologieën en frameworks: C#, JS frameworks,

Bekijk vacature »

PHP ontwikkelaar

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

C# .NET Developer

Dit ga je doen Je richt je op het doorontwikkelen en herstructureren van het platform; Je werkt in teamverband en zelfstandig aan uitdagende projecten voor verschillende klanten; Softwareontwikkeling middels C# .NET; Je staat in contact met verschillende opdrachtgevers om de klantwensen te bespreken en deze vervolgens te ontwikkelen; Verbeteren van bedrijfsprocessen; Implementaties. Hier ga je werken Als .NET Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet

Bekijk vacature »

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 »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Medior Java developer

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 »

Softwareontwikkelaar Cleopatra

Functieomschrijving: De directie Verkeer en Openbare ruimte van de gemeente Amsterdam beschikt over een softwareapplicatie, "Cleopatra", waarmee geautomatiseerde handhaving plaatsvindt (op basis van kentekenherkenning) van bepaalde gebieden waarin toegangseisen worden gesteld aan het verkeer. Voorbeelden ervan zijn de milieuzones, de zone zwaar verkeer, handhaving van bromen snorfietser op het fietspad en autoluwe gebieden. Voor de doorontwikkeling en uitbreiding ervan zijn gespecialiseerde softwareontwikkelaars nodig die helpen bij het programmeren van de handhavingsmodules voor nieuwe gebieden en het verbeteren en bijwerken van de bestaande onderdelen van de softwareapplicatie.De opdracht bestaat uit: het programmeren van de diverse modules;het tijdens demo's tonen van de

Bekijk vacature »

Junior .NET developer

Functie Wij hebben drie scrumteams. Het eerste team focust zich op het stukje hardware wat wij in huis doen. Zij maken als team o.a. gebruik van C++. De andere twee scrumteams zijn allebei bezig met data verwerking en maken hierbij in de backend gebruik van C# .NET / .NET Core. Het verschil tussen deze teams is dat één team de data verwerking doet voor de mobiele applicatie. Zij werken hierbij dus ook met Xamarin. Het andere team focust zich op de webapplicaties en maakt hierbij ook gebruik van ASP.NET MVC. Op basis van jouw ambities en kwaliteiten kijken wij samen

Bekijk vacature »
Ozzie PHP

Ozzie PHP

10/03/2014 22:44:32
Quote Anchor link
Hallo guys,

Ik werd vandaag getipt over de Serializable interface, dat die handig zou zijn als je objecten gaat cachen.

Op php.net zie ik dit voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

class obj implements Serializable {
    private $data;
    public function __construct() {
        $this->data = "My private data";
    }

    public function serialize() {
        return serialize($this->data);
    }

    public function unserialize($data) {
        $this->data = unserialize($data);
    }

    public function getData() {
        return $this->data;
    }
}


$obj = new obj;
$ser = serialize($obj);

var_dump($ser);

$newobj = unserialize($ser);

var_dump($newobj->getData());

?>

Het resultaat op mijn scherm is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
string(38) "C:3:"obj":23:{s:15:"My private data";}"
string(15) "My private data"


Als ik nu de Serializable interface niet implement, en ik de "serialize" en "unserialize" methods verwijder, krijg je dit:

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
<?php

class obj {
    private $data;
    public function __construct() {
        $this->data = "My private data";
    }


    public function getData() {
        return $this->data;
    }
}


$obj = new obj;
$ser = serialize($obj);

var_dump($ser);

$newobj = unserialize($ser);

var_dump($newobj->getData());

?>

Het resultaat op mijn scherm is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
string(53) "O:3:"obj":1:{s:9:"objdata";s:15:"My private data";}"
string(15) "My private data"

Wat is nu eigenlijk het verschil? Ik zie wel dat de 1e regel op mijn scherm korter is in het 1e voorbeeld dan in het 2e voorbeeld.
 
PHP hulp

PHP hulp

23/11/2024 19:05:32
 
Dos Moonen

Dos Moonen

10/03/2014 23:48:43
Quote Anchor link
http://3v4l.org/alrdB

O:3:"obj":1:{s:9:"objdata";s:15:"My private data";}
O staat voor object (niet de unserialize() methode aanroepen)
3 strlen('obj')
"obj" de naam van de class
1 aantal variabelen
{ begin van de data
s string
9 strlen('objdata')
"objdata" private (kun je herkennen door de class naam prefix) $data
; einde waarde
s string
15 strlen('My private data')
"My private data" waarde voor private $data
; einde waarde
} einde data


C:3:"obj":23:{s:15:"My private data";}
C staat voor class (roep de unserialize() methode aan)
3 strlen('obj')
"obj" class naam
23 strlen('s:15:"My private data";')
{ begin data
s string
15 strlen('My private data')
"My private data" de waarde die aan unserialize wordt gegeven
; einde waarde
} einde data
 
Ozzie PHP

Ozzie PHP

10/03/2014 23:57:06
Quote Anchor link
Thanks Dos! Mooie uitleg.

Om de verschillen nu te begrijpen... met de serialize methode geef je aan welke data (uit de properties) moet worden opgeslagen, en via unserialize geef je aan waar die data heen moet. Zou je het zo kunnen zeggen? En wat is nu precies het nut? Dat het geserializede object in de laatste versie minder ruimte inneemt?
 
Dos Moonen

Dos Moonen

11/03/2014 01:01:05
Quote Anchor link
Dat niet alles geserialiseert hoeft te worden. De database verbinding zou je lekker kunnen laten zitten als je deze via een statische methode op kan vragen bijvoorbeeld.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

class miauw implements Serializable {

  public function serialize() {
    return $alles_behalve_database_verbinding;
  }


  public function unserialize($data) {
    $this->connection = Database::getConnection();

    //...
  }
}


?>


Je hebt controle over wat er in een bestand/database/sessie/cookie/whatever dat door weet ik veel wie gelezen kan worden komt te staan.
 
Ozzie PHP

Ozzie PHP

11/03/2014 01:07:29
Quote Anchor link
Ah zo, oke... thanks Dos. Ik leer steeds meer :-)
 
Ozzie PHP

Ozzie PHP

26/04/2014 18:00:16
Quote Anchor link
Nog even een vraagje over serializable.

Stel ik heb een class waarin ik een property $data en $locked heb staan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Foo {

  private $data;
  private $locked = false;

}

?>

Als ik nu telkens wanneer ik het object serialize deze 2 properties wil opslaan, hebben de serialize en unserialize methods dan nog enige toegevoegde waarde? Of kan ik die 2 methods en de interface beter achterwege laten?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/04/2014 21:57:40
Quote Anchor link
Het lijkt me dan makkelijker om deze achterwege te laten aangezien je het hele object dan wilt serializen.
 
Ozzie PHP

Ozzie PHP

26/04/2014 22:02:45
Quote Anchor link
Oké, dat lijkt mij inderdaad ook. Maar wanneer gebruik je de Serializable interface dan in de praktijk? Ik zou denken dat je die niet zo heel vaak nodig hebt eigenlijk?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/04/2014 22:07:39
Quote Anchor link
Zoals Dos zegt: Enkel wanneer je niet alles uit een object wilt serializen of als je misschien je data enigzins wilt wijzigen bij het serializen/unserializen
Gewijzigd op 26/04/2014 22:12:02 door Frank Nietbelangrijk
 
Ozzie PHP

Ozzie PHP

26/04/2014 23:00:38
Quote Anchor link
Oké, dankje. Dan haal ik het hier maar weg aangezien het niks toevoegt.
 
Wouter J

Wouter J

26/04/2014 23:31:53
Quote Anchor link
Er is wel een groot verschil: Met serializable bepaal je hoe je een object serialized. Zonder het wordt het complete object geserialized. Dit kan voor behoorlijk wat ruimtebesparing zorgen:
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
<?php
class A
{
  public $b = 'foo';
  public $c = 'fiz';
}


class B extends A implements Serializable
{
  public function serialize()
  {

    return $this->b.'%$%'.$this->c;
  }


  public function unserialize($data)
  {

    list($this->b, $this->c) = explode('%$%', $data, 2);
  }
}


$a1 = new A();

$b = new B();

echo 'A: ', serialize($a1), PHP_EOL;
echo 'B: ', serialize($b), PHP_EOL;
?>

Resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
A: O:1:"A":2:{s:1:"b";s:3:"foo";s:1:"c";s:3:"fiz";}
B: C:1:"B":9:{foo%$%fiz}

Zoals je ziet wordt bij A een object (O:) genaamd A geserialized, waarvan de property b een waarde "foo" heeft en "c" de waarde "fiz".

Bij B wordt geen object, maar een klasse (C:) genaamd B geserialized, hiervan wordt daarnaast de return waarde van serialize geplakt.

In dit geval zijn het 2 simpele objecten die ik doormiddel van de %$% symbool van elkaar scheid.
 
Ozzie PHP

Ozzie PHP

26/04/2014 23:50:59
Quote Anchor link
Ik snap je voorbeeld, maar in een situatie als deze:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
class Foo {

  private $data;
  private $locked = false;

}

?>

Heeft het dan ook zin om serialize en unserialize te gebruiken? In jouw voorbeeld gaat het om 2 strings en dan begrijp ik wat je bedoelt. Maar hier gaat het om een array ($data). Kun je dan ook zo'n truc doen, of voegt het niks toe?
 
Wouter J

Wouter J

26/04/2014 23:59:07
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
O:3:"Foo":2:{s:9:"?Foo?data";a:2:{i:0;s:3:"foo";i:1;s:3:"fiz";}s:11:"?Foo?locked";b:0;}
C:3:"Foo":37:{a:2:{i:0;s:3:"foo";i:1;s:3:"fiz";}||0}


Eerste is zoals jij het nu hebt, tweede is met:
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
<?php
class Foo implements Serializable {

  private $data = array('foo', 'fiz');
  private $locked = false;

  public function serialize()
  {

    return serialize($this->data).'||'.($this->locked ? 1 : 0);
  }


  public function unserialize($serialized)
  {

    list($data, $locked) = explode('||', $serialized, 2);
    $this->data = unserialize($data);
    $this->locked = (boolean) $locked;
  }
}

?>
 
Ozzie PHP

Ozzie PHP

27/04/2014 00:08:43
Quote Anchor link
Ah oké. Dat is inderdaad wel grappig.

Begrijp ik dus goed dat je zo'n constructie vooral gebruikt om ruimte te besparen?

Waarom kies je in je 1e voorbeeld voor %$% als scheidingsteken, en in je 2e voorbeeld voor || ?
 
Wouter J

Wouter J

27/04/2014 09:09:13
Quote Anchor link
>> Begrijp ik dus goed dat je zo'n constructie vooral gebruikt om ruimte te besparen?

Dat is inderdaad wel 1 van de hoofdfeiten voor het gebruik van Serializable. Ruimte en bepalen welke properties elke keer opnieuw moeten geset worden en dus niet gecached of welke properties er wel verstuurd mogen worden naar een 3rd party.

>> Waarom kies je in je 1e voorbeeld voor %$% als scheidingsteken, en in je 2e voorbeeld voor || ?

Beetje willekeurig. Je moet een teken bedenken die niet snel gebruikt kan worden in de properties die je hebt. Iets als %$% zal je niet vaak tegenkomen.
 
Ozzie PHP

Ozzie PHP

27/04/2014 13:41:40
Quote Anchor link
Allright. Ik ga er eens wat mee spelen ;)
 



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.