[PHP]Clone / Reference vershil

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Modbreak:Afgesplitst van De Devschuur Coffee Corner - Iteratie 4
PrisonerOfPain schreef op dinsdag 03 september 2013 @ 17:03:
Voeg $post eens toe aan je $list ipv $specialist.
Dan krijg ik 2x dezelfde post zonder locatie. Ik wil 2x dezelfde post met verschillende locatie.

Dus...

code:
1
2
3
4
5
6
7
8
9
10
11
12
$list {
    [town-a] {
        0 {
            naam: A
            locatie: 1
        },
        1 {
            naam: A
            locatie: 2
        }
    }
}


... en nu heb ik...

code:
1
2
3
4
5
6
7
8
9
10
11
12
$list {
    [town-a] {
        0 {
            naam: A
            locatie: 1
        },
        1 {
            naam: A
            locatie: 1
        }
    }
}


... terwijl print_r() bij het maken van de array $list netjes 2 verschillende locaties weergeeft.

Nouja, morgen weer verder kijken, wellicht komt dan mijn eureka moment :+ En zo niet, dan open ik wel even een topic xd

[ Voor 4% gewijzigd door Woy op 04-09-2013 15:08 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
PHP:
1
        $list[$specialist_location['specialist_location_town']][] = clone $specialist;

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat zou ik bij $specialist = $post doen dan.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Tsja.

Acties:
  • 0 Henk 'm!

  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-08 21:46

GateKeaper

#1 Procastinator

Volgens mij valt dit niet onder de categorie rubber-duck-debugging :P

Acties:
  • 0 Henk 'm!

Verwijderd

GateKeaper schreef op dinsdag 03 september 2013 @ 17:41:
Volgens mij valt dit niet onder de categorie rubber-duck-debugging :P
Eerder onder de categorie helpdesken? :+

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op dinsdag 03 september 2013 @ 17:49:
[...]


Eerder onder de categorie helpdesken? :+
Precies! Dus kies maar, afsplitsen naar apart topic of nu gewoon laten gaan :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
$specialist = $post kopieert niets nada noppes. Hoog tijd om je geheugen over OO en bijv clonen van objecten op te frissen. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Ontbijten en even rustig de krant lezen is voor mij het belangrijkste 's ochtends. Lekker bakkie Brinta of Quaker Havermout! :9 Tussen de middag op het werk 4 bammetjes, twee met vleeswaren en twee met pindakaas :o

---

offtopic:
@ PrisonerOfPain & .oisyn: clone werkt op beide plekken, heb er $specialist = clone $post; van gemaakt. Thnx!

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
TheNephilim schreef op woensdag 04 september 2013 @ 11:09:
offtopic:
@ PrisonerOfPain & .oisyn: clone werkt op beide plekken, heb er $specialist = clone $post; van gemaakt. Thnx!
Heb al bijna 5 jaar geen serieus php werk meer gedaan :*) - nice.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

TheNephilim schreef op woensdag 04 september 2013 @ 11:09:
offtopic:
@ PrisonerOfPain & .oisyn: clone werkt op beide plekken, heb er $specialist = clone $post; van gemaakt. Thnx!
Logisch dat het "werkt" op beide plekken, maar snap je ook wat het verschil is tussen die twee plekken?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-08 21:46

GateKeaper

#1 Procastinator

.oisyn schreef op woensdag 04 september 2013 @ 12:27:
[...]

Logisch dat het "werkt" op beide plekken, maar snap je ook wat het verschil is tussen die twee plekken?
Regelnummer? :+

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
.oisyn schreef op woensdag 04 september 2013 @ 12:27:
[...]

Logisch dat het "werkt" op beide plekken, maar snap je ook wat het verschil is tussen die twee plekken?
Dat is toch niet belangrijk, het "werkt", klaar :+

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
.oisyn schreef op woensdag 04 september 2013 @ 12:27:
[...]

Logisch dat het "werkt" op beide plekken, maar snap je ook wat het verschil is tussen die twee plekken?
De ene keer clone ik $post en de andere keer $specialist en wat ik uiteindelijk fout deed, was het niet instantiëren van een nieuw object?

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
TheNephilim schreef op woensdag 04 september 2013 @ 13:32:
[...]


De ene keer clone ik $post en de andere keer $specialist en wat ik uiteindelijk fout deed, was het niet instantiëren van een nieuw object?
Alleen $post en $specialist verwijzen naar hetzelfde object ( Zonder het clonen ). Het verschil is dus hetgeen op "het" object gebeurt tussen de twee locaties ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Woy schreef op woensdag 04 september 2013 @ 13:38:
[...]

Alleen $post en $specialist verwijzen naar hetzelfde object ( Zonder het clonen ). Het verschil is dus hetgeen op "het" object gebeurt tussen de twee locaties ;)
Zonder clone te gebruiken is het meer een 'link'? En pas met clone een 'nieuw' object?

Acties:
  • 0 Henk 'm!

  • StM
  • Registratie: Februari 2005
  • Laatst online: 19-09 16:12

StM

Ja, zoek eens naar het verschil tussen Passing by reference en Passing by value.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
TheNephilim schreef op woensdag 04 september 2013 @ 13:45:
[...]


Zonder clone te gebruiken is het meer een 'link'? En pas met clone een 'nieuw' object?
'link' -> reference.

[ Voor 17% gewijzigd door PrisonerOfPain op 04-09-2013 13:49 ]


Acties:
  • 0 Henk 'm!

  • Hipska
  • Registratie: Mei 2008
  • Laatst online: 15-09 21:08
idd, zonder clone kan je het meer zien als een soort pointer

Edit: idd, reference dus.

[ Voor 19% gewijzigd door Hipska op 04-09-2013 13:53 ]


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
StM schreef op woensdag 04 september 2013 @ 13:47:
Ja, zoek eens naar het verschil tussen Passing by reference en Passing by value.
Ah, op Stackoverflow vond ik daar een mooie beschrijving van. Thanks!

Duidelijk! ^^

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
TheNephilim schreef op woensdag 04 september 2013 @ 13:52:
[...]


Ah, op Stackoverflow vond ik daar een mooie beschrijving van. Thanks!

Duidelijk! ^^
http://php.net/manual/en/language.oop5.cloning.php

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Òòh, kwam op de oude terecht, de nieuwe beta is toch even een stuk overzichtelijker.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

TheNephilim schreef op woensdag 04 september 2013 @ 13:52:
[...]


Ah, op Stackoverflow vond ik daar een mooie beschrijving van. Thanks!

Duidelijk! ^^
Dus nogmaals, wat is nou precies het verschil in het clonen op de twee verschillende plekken in jouw code? :)

[ Voor 4% gewijzigd door .oisyn op 04-09-2013 14:56 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • DXaroth
  • Registratie: Maart 2011
  • Laatst online: 24-08 19:58
By Reference vs By Value is een stuk makkelijker als je denkt in het concept van pointers :P

Acties:
  • 0 Henk 'm!

  • GateKeaper
  • Registratie: April 2004
  • Laatst online: 05-08 21:46

GateKeaper

#1 Procastinator

.oisyn schreef op woensdag 04 september 2013 @ 14:55:
[...]


Dus nogmaals, wat is nou precies het verschil in het clonen op de twee verschillende plekken in jouw code? :)
Ja he... zoek 't even zelf uit. Het is hier toch geen helpdesk. :+

Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
.oisyn schreef op woensdag 04 september 2013 @ 14:55:
[...]


Dus nogmaals, wat is nou precies het verschil in het clonen op de twee verschillende plekken in jouw code? :)
Eeehm, dit?

PHP:
1
2
3
4
5
6
7
8
// Nieuw object maken, een kopie van $post
$specialist = clone $post;

// De locatie toevoegen aan het nieuwe object, $post blijft ongewijzigd
$specialist->location = json_decode(json_encode($specialist_location), false);

// Nieuwe object in een array stoppen
$list[$specialist_location['specialist_location_town']][] = $specialist;


of

PHP:
1
2
3
4
5
6
7
8
// Referentie maken van $specialist naar $post
$specialist = $post;

// De locatie toevoegen aan $specialist, maar omdat het een referentie is, word ook $post gewijzigd
$specialist->location = json_decode(json_encode($specialist_location), false);

// Een nieuw object, een kopie van $specialist, in een array stoppen
$list[$specialist_location['specialist_location_town']][] = clone $specialist;


Ben ik er nu? xd

Acties:
  • 0 Henk 'm!

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 16-09 09:06

Firesphere

Yoshis before Hoshis

TheNephilim schreef op woensdag 04 september 2013 @ 15:02:
[...]


Eeehm, dit?

PHP:
1
2
3
4
5
6
7
8
// Nieuw object maken, een kopie van $post
$specialist = clone $post;

// De locatie toevoegen aan het nieuwe object, $post blijft ongewijzigd
$specialist->location = json_decode(json_encode($specialist_location), false);

// Nieuwe object in een array stoppen
$list[$specialist_location['specialist_location_town']][] = $specialist;


of

PHP:
1
2
3
4
5
6
7
8
// Referentie maken van $specialist naar $post
$specialist = $post;

// De locatie toevoegen aan $specialist, maar omdat het een referentie is, word ook $post gewijzigd
$specialist->location = json_decode(json_encode($specialist_location), false);

// Een nieuw object, een kopie van $specialist, in een array stoppen
$list[$specialist_location['specialist_location_town']][] = clone $specialist;


Ben ik er nu? xd
Waarom doe je die json_decode(json_encode());?
Als het een associative array is, doe dan
PHP:
1
$specialist->location = (stdClass) $specialist_location;

Dan is't ook meteen duidelijk wat er gebeurd voor een leek iemand met minder kennis van php.

[ Voor 3% gewijzigd door Firesphere op 04-09-2013 15:06 ]

I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Juist. Just checking ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 17-09 11:07
Firesphere schreef op woensdag 04 september 2013 @ 15:04:
[...]

Waarom doe je die json_decode(json_encode());?
Als het een associative array is, doe dan
PHP:
1
$specialist->location = (stdClass) $specialist_location;

Dan is't ook meteen duidelijk wat er gebeurd voor een leek iemand met minder kennis van php.
Om de Array als Object in het bestaande Object te zetten. Niet de netste manier inderdaad, maar om ze per property erin te zetten was ook niet handig, gezien het feit dat er dynamisch velden bij kunnen komen.

Omzetten naar een object met
PHP:
1
$specialist->location = (stdClass) $specialist_location;
levert een syntax error op, maar met
PHP:
1
$specialist->location = (object) $specialist_location;
doet hij het wel. Nicely, bedankt! :D
Haha, dank voor de bijles! oOo
Pagina: 1