[oop] Serializable

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Traineeship IT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Junior Front end developer

Functie Als Front end developer binnen onze organisatie ga jij je bezig houden met het bouwen van de user experience van de webapplicaties. Je bent verantwoordelijk voor het vertalen van concepten, briefings en designs naar werkende functionaliteit. Hierbij zorg je ervoor dat applicaties betrouwbaar, veilig en toekomstbestendig zijn en een goede architectuur hebben en behouden. Verder denk je actief na- en mee over nieuwe ontwikkelingen en functionaliteiten om zo elke dag de klantervaring weer te verbeteren. Dit doe je natuurlijk niet alleen maar in een development team. Het team bedraagt momenteel 4 man bestaande uit 2 devops engineers en 2

Bekijk vacature »

Frontend Developer - Leeuwarden

Frontend Developer – Leeuwarden Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider

Bekijk vacature »

Front-end developer wanted! (Angular, React, Vue.j

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Full Stack .NET Developer

Dit ga je doen Als developer nieuwe gave features ontwikkelen; Werken met technieken als C#, Angular 12 en Javascript,; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een team van 7 professionals ben je als Full Stack .NET Developer verantwoordelijk voor het ontwikkelen van applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je hierbij beheerst is C#. Wil je van meerwaarde

Bekijk vacature »

Fullstack Developer

Functieomschrijving Heb je kort geleden jouw HBO diploma ICT development behaald? Of zit je nog aan het begin van je carrière en heb je affiniteit met C#.NET? Voor een erkende werkgever in de omgeving van Oosterhout zijn wij op zoek naar een fullstack developer. Als C#.NET developer werk je samen met een vooruitstrevend team aan het ontwikkelen van maatwerk software voor klanten. Je hebt affiniteit met SQL, maar nog belangrijker is dat je kennis en ervaring hebt met C#.NET. Jouw werkzaamheden zien er als volgt uit: Het ontwikkelen van onze high-availability en high-performance backend; Je begint de dag rond 8:30

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Modern, innovatief en Informeel bedrijf waar veel mogelijk is Werken met diverse robot merken Meehelpen met inbedrijfstellingen bij de klant De organisatie Hier ga je aan de slag Dit groeiende bedrijf van totaaloplossingen in de automatisering van productieprocessen, is hoofdzakelijk actief in de Benelux. Vanuit het kantoor in regio Amersfoort worden veel oplossingen geboden in de vorm van robotica. Geen project is hetzelfde wat garant staat voor bijzonder veel afwisseling. De bedrijfsgrootte is ongeveer 80 man. Van gerobotiseerde machinebeladingen tot aan assemblage automatiseringen wordt vanuit krachtige engineering maatwerk equipment geleverd.

Bekijk vacature »

C# Ontwikkelaar

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

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 »

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 »

Junior PHP Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale aspecten van Coolblue. Wat doe je als Junior PHP Developer bij Coolblue? Als Junior PHP Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen om te groeien als Junior Developer. Op dat moment komt je wil om steeds te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te kunnen maken. Je sterk analytisch vermogen komt dan ook goed

Bekijk vacature »

API Developer Red Hat Fuse

Dit ga je doen Als API Developer zal je verantwoordelijk zijn voor het: het maken van API's en het correct laten draaien van de API's op het platform. Hierdoor kom je in aanraking met Red Hat Fuse, Springt Boot, 3Scale, Red Hat SSO, Openshift en Azure DevOps; zorgen voor de kwaliteit van de ontwikkeling, integratie en prestaties van de API's; zorgen voor een stabiel integratieplatform. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap dat hoofdzakelijk op OpenShift, Azure en

Bekijk vacature »

Front-end Developer (HTML/CSS, Angular/React/Vue,

Functie Je zal aan de slag gaan in een klein, hecht team met front-end development experts die de ambitie delen mooi werk te leveren. Samen met hen zal je werken aan het gebruiksvriendelijk en interactief maken van complexe webapplicaties, websites en mobile apps. Je levert klanten wat ze nodig hebben terwijl je actief aan jezelf blijft werken met de ondersteuning vanuit je werkplek. Talen als Javascript programmeer jij vloeiend en je hebt kennis van frameworks als React en Angular. Je zou je het liefst nog veel meer ontwikkelen in verschillende front-end talen. Deze kennis deel je graag met je collega’s,

Bekijk vacature »

Front-end (Angular) developer

Functie Om bovenstaande ambities waar te kunnen maken zijn ze op zoek naar een Front-end (Angular) developer. Het it-team bestaat momenteel uit de IT Manager, 2 back-end developers, 1 fullstack developer, 1 designer en een DevOps engineer. Ze zijn dus op zoek naar professionals die autonoom en gedisciplineerd aan de slag gaan, en bij aanvang als enige developer met hun Front-end applicaties aan de slag gaat. Wel hebben ze de ambitie om hier snel een 2e developer bij te vinden die jij dan ook zal kunnen aansturen/begeleiden. Je zult aan de slag gaan met het doorontwikkelen van hun bestaande UI

Bekijk vacature »

Oracle APEX Ontwikkelaar (3.500-6.000 euro)

Bedrijfsomschrijving Ben jij een getalenteerde Oracle APEX ontwikkelaar met minimaal één jaar ervaring in het ontwikkelen van Oracle APEX-applicaties? Ben je gepassioneerd over het ontwikkelen van bedrijfskritische oplossingen en wil je werken bij een toonaangevend consultancybedrijf? Dan zijn wij op zoek naar jou! Deze organisatie beschikt over zowel inhouse als externe projecten, maar bovenal over een sterk team en netwerk van opdrachten waardoor jij jezelf verder kunt ontwikkelen. Het team bestaat uit een aantal junior en medior developers, maar vooral uit senioren. De business unit managers binnen het team zijn mensen die hun vak verstaan en zelf als Oracle APEX

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

28/12/2024 06:52:04
 
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.