Tijdens het dagelijkse rond kloten kwam ik iets tegen in PHP wat mij nogal verbaasde.
Allereerst maken wij een gewone array en vervolgens zetten wij die om naar een object daarna voegen wij aan dat object nieuwe waarden toe en daarna zetten wij het object weer om naar en array. Tussen elke stap gebruiken wij var_dump om de inhoud te zien van de array of het object.
Het resultaat is als volgt:
Als gevolg hiervan kun je waarden in een array die opgeslagen zijn met numerieke sleutel niet benaderen wanneer je deze omzet naar een object. Andersom ook niet.
Stel je voor je geeft één van je collega's via een klasse of functie een array terug met waarden die hij er niet kan uithalen. Hij gebruikt var_dump of print_r en kan ze wel zien maar niet benaderen.
Volgens nikic (één PHP core developer) komt dit omdat numerieke sleutels in een array in C uiteindelijk als getal worden beschouwd zelf al gebruik je deze syntax in php '1' => 'value'. Andersom worden numerieke sleutels in objecten altijd opgeslagen als strings.
Allereerst maken wij een gewone array en vervolgens zetten wij die om naar een object daarna voegen wij aan dat object nieuwe waarden toe en daarna zetten wij het object weer om naar en array. Tussen elke stap gebruiken wij var_dump om de inhoud te zien van de array of het object.
PHP: test.php
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
| <?php $array = array( 1 => 'value1', '2' => 'value2', 'fulltext' => 'value3' ); echo '<pre>'; var_dump($array); $object = (object)$array; var_dump($object); $object->{1} = 'Verandervalue1'; $object->{'2'} = 'Verandervalue2'; $object->fulltext = 'Verandervalue3'; var_dump($object); $array = (array)$object; var_dump($array); echo '</pre>'; ?> |
Het resultaat is als volgt:
array(3) {
[1]=>
string(6) "value1"
[2]=>
string(6) "value2"
["fulltext"]=>
string(6) "value3"
}
object(stdClass)#1 (3) {
[1]=>
string(6) "value1"
[2]=>
string(6) "value2"
["fulltext"]=>
string(6) "value3"
}
object(stdClass)#1 (5) {
[1]=>
string(6) "value1"
[2]=>
string(6) "value2"
["fulltext"]=>
string(14) "Verandervalue3"
["1"]=>
string(14) "Verandervalue1"
["2"]=>
string(14) "Verandervalue2"
}
array(5) {
[1]=>
string(6) "value1"
[2]=>
string(6) "value2"
["fulltext"]=>
string(14) "Verandervalue3"
["1"]=>
string(14) "Verandervalue1"
["2"]=>
string(14) "Verandervalue2"
}
Als gevolg hiervan kun je waarden in een array die opgeslagen zijn met numerieke sleutel niet benaderen wanneer je deze omzet naar een object. Andersom ook niet.
Stel je voor je geeft één van je collega's via een klasse of functie een array terug met waarden die hij er niet kan uithalen. Hij gebruikt var_dump of print_r en kan ze wel zien maar niet benaderen.
Volgens nikic (één PHP core developer) komt dit omdat numerieke sleutels in een array in C uiteindelijk als getal worden beschouwd zelf al gebruik je deze syntax in php '1' => 'value'. Andersom worden numerieke sleutels in objecten altijd opgeslagen als strings.
[ Voor 0% gewijzigd door RobIII op 17-10-2013 17:15 . Reden: Output in [cmd] tags voor leesbaarheid ]
sirwilliam