Moin meine CBler,
diesesmal melde ich mich mit einem absolut unverständlichem Verhalten von PHP.
Ich habe eine Klasse geschrieben die den Login eines users verwaltet und in einer eigenen Klasse dann die Rechte verwaltet. Um diese nicht immer aus der Datenbank laden zu müssen speichere ich das Login Objekt und damit auch das Rechte Objekt in der Session.
Beide Klassen implementieren das Interface serializable und de- / serialisieren wie gewollt.
die Rechte werden in dem Rechte Objekt in einem 2 dimensionalem Array gespeichert nach dem Schema:
für jede Niederlassung gibt es die selben rechte und jeder user kann beliebig vielen niederlassungen angehören und je nachdem verschiedene rechnte habe.
die niederlassungsid wird als string / assoziativer array gespeichert!
ich serialisiere indem ich die objekte per json_encode in einen json string konvertiere.
beim deserialisieren wird dann der string mit json_decode und dem anpassen einiger werte wieder ein Objekt erzeugt.
Klappt alles wunderbar, bis auf die tatsache das json_encode statt arrays stdObjekte erzeugt, aber das noch das kleinere übel.
viel schlimmer ist das es mir unmöglich ist gezielt auf den deserialisierten Array zuzugreifen!
Weder über den zugriff mit eckigen Klammern $this->rechte[], noch über ein Objekt zugriff mit -> (was mir auch nichts nützen würde....)
ich kann problemlos mit foreach durch die array kays iterieren, aber da zeigt sich schon komisches verhalten!
erzeugt folgende ausgabe:
obwohl ich den key über eine iteration der arrays keys bekomme erhalte ich trotzdem keinen zugriff, da stimmt doch was nicht.....
hier mal nen var_dump von $this->rechte
übrigens gleiches verhalten bei einer normalen foreach iteration:
erzeugt:
jemand ne idee?
diesesmal melde ich mich mit einem absolut unverständlichem Verhalten von PHP.
Ich habe eine Klasse geschrieben die den Login eines users verwaltet und in einer eigenen Klasse dann die Rechte verwaltet. Um diese nicht immer aus der Datenbank laden zu müssen speichere ich das Login Objekt und damit auch das Rechte Objekt in der Session.
Beide Klassen implementieren das Interface serializable und de- / serialisieren wie gewollt.
die Rechte werden in dem Rechte Objekt in einem 2 dimensionalem Array gespeichert nach dem Schema:
Code:
Array {
['NIEDERLASSUNG_ID_1'] => Array {
['recht1'] => 0,
['recht2'] => 1
},
['NIEDERLASSUNG_ID_2'] => Array {
['recht1'] => 0,
['recht2'] => 0
}
}
die niederlassungsid wird als string / assoziativer array gespeichert!
ich serialisiere indem ich die objekte per json_encode in einen json string konvertiere.
beim deserialisieren wird dann der string mit json_decode und dem anpassen einiger werte wieder ein Objekt erzeugt.
Klappt alles wunderbar, bis auf die tatsache das json_encode statt arrays stdObjekte erzeugt, aber das noch das kleinere übel.
viel schlimmer ist das es mir unmöglich ist gezielt auf den deserialisierten Array zuzugreifen!
Weder über den zugriff mit eckigen Klammern $this->rechte[], noch über ein Objekt zugriff mit -> (was mir auch nichts nützen würde....)
ich kann problemlos mit foreach durch die array kays iterieren, aber da zeigt sich schon komisches verhalten!
Code:
var_dump($niederlassungId);
echo '<hr>';
$t = array_keys($this->rechte);
foreach($t as $v) {
var_dump($v) . "<br>";
echo $v == $niederlassungId ? 'Gleich' : 'Nicht gleich';
echo '<br>';
var_dump($this->rechte[$v]);
echo "<hr>";
}
erzeugt folgende ausgabe:
Code:
string(1) "1"
--------------------
string(1) "1"
Gleich
NULL
---------------------
string(1) "2"
Nicht gleich
NULL
---------------------
string(3) "999"
Nicht gleich
NULL
obwohl ich den key über eine iteration der arrays keys bekomme erhalte ich trotzdem keinen zugriff, da stimmt doch was nicht.....
hier mal nen var_dump von $this->rechte
Code:
array(3) {
["1"]=>
object(stdClass)#9 (4) {
["projekt_sehen"]=>
string(1) "1"
["projekt_bearbeiten"]=>
string(1) "1"
["projekt_mietwagen_sehen"]=>
string(1) "1"
["projekt_mietwagen_bearbeiten"]=>
string(1) "1"
}
["2"]=>
object(stdClass)#10 (4) {
["projekt_sehen"]=>
string(1) "0"
["projekt_bearbeiten"]=>
string(1) "0"
["projekt_mietwagen_sehen"]=>
string(1) "0"
["projekt_mietwagen_bearbeiten"]=>
string(1) "0"
}
["999"]=>
object(stdClass)#11 (4) {
["projekt_sehen"]=>
string(1) "0"
["projekt_bearbeiten"]=>
string(1) "0"
["projekt_mietwagen_sehen"]=>
string(1) "0"
["projekt_mietwagen_bearbeiten"]=>
string(1) "0"
}
}
übrigens gleiches verhalten bei einer normalen foreach iteration:
Code:
foreach($this->rechte as $r => $rr) {
echo "$r --> $rr <br>";
echo isset($this->rechte[$r]) ? 'Isset' : 'is not set ';
echo '<br>';
echo $r == $niederlassungId ? 'Gleich' : 'Nicht gleich';
echo '<hr>';
}
erzeugt:
Code:
1 -->
is not set
Gleich
------------------------
2 -->
is not set
Nicht gleich
-------------------------
999 -->
is not set
Nicht gleich
jemand ne idee?
Zuletzt bearbeitet: