Hallo,
ich habe schon gesucht, aber nichts gefunden, was ich machen könnte.
Ich habe ein Object. Ich würde gerne durch die ganzen Felder in dem Object durchgehen. Wie komme ich da hin?
Ich würde einfach das Object gerne als Array haben wollen, dann kann ich mir einer foreach-Schleife durchgehen. Aber auch da weiß ich nicht wie es geht.
Was kann ich nun machen und vor allem wie?
Ciao, micbur
Ankündigung
Einklappen
Keine Ankündigung bisher.
Object as Array
Einklappen
Neue Werbung 2019
Einklappen
X
-
Warum, numerisch geht doch dachte ich. Ich meinte falls eine Property ein Array ist, kann ich nichts auf den Inhalt pushen:
PHP-Code:<?php
class Xy implements ArrayAccess {
protected $_properties = array("myArray" => array());
public function offsetSet($property, $value) {
$this->_properties[$property] = $value;
}
public function offsetGet($property) {
return $this->_properties[$property];
}
// ..
}
$xy = new Xy();
$xy["myArray"][] = "neues MyArray-Element"; // failure
// ..
$array = $xy["myArray"];
$array[] = "neues MyArray-Element";
$xy["myArray"] = $array; // success
?>
-
Wohl, weil es vermutlich keine Property mit numerischen Namen geben kann. Wenn man sich da was ausknobelt wirkt das vermutlich schon wie eine Krücke..
Einen Kommentar schreiben:
-
Zitat von Chriz Beitrag anzeigenMöchte ich bei einem User-Objekt das Passwort ausgeben, sicherlich nicht immer, was ist mit der ID des Datensatzes?
Zitat von Chriz Beitrag anzeigenArrayAccess auf ein Objekt finde ich nicht gut, wegen dem [] Array-Operator, der hier nicht funktioniert und der Tatsache, dass ein Objekt nunmal ein Objekt ist, das getter/setter-Methoden hat, und kein Array.
Einen Kommentar schreiben:
-
Wobei ich es zweifelhaft finde, über ein z.B. User-Objekt zu iterieren oder ArrayAccess darauf zu verwenden. Ein Objekt ist ja im Gegensatz zum Array gerade keine Liste gleichartiger Elemente, sondern hat völlig unterschiedliche Eigenschaften, die von mir aus zwar in einem Zug ausgegeben werden können, aber dann doch nicht immer. Möchte ich bei einem User-Objekt das Passwort ausgeben, sicherlich nicht immer, was ist mit der ID des Datensatzes? Dann fange ich entweder an, im Objekt selbst zu filtern (der Iterator überspringt intern also Eigenschaften), dann habe ich ein Problem, wenn ich dann doch mal über diese Eigenschaften mititerieren möchte, oder aber ich filtere das ganze mit einer Blacklist:
PHP-Code:<?php
while (current($userObject)) {
$property = key($userObject);
$value = current($userObject);
if ($property == "id" || $property == "password") {
continue;
}
echo "$property: $value<br />";
}
?>
ArrayAccess auf ein Objekt finde ich nicht gut, wegen dem [] Array-Operator, der hier nicht funktioniert und der Tatsache, dass ein Objekt nunmal ein Objekt ist, das getter/setter-Methoden hat, und kein Array.
Einen Kommentar schreiben:
-
Rauskram. Habe herade gesehen, wieviele Hits dieser Thread hat, deswegen wollte ich noch ergänzen, dass in PHP5 je nach Anwendungszweck die Implementierung der Interfaces [MAN]ArrayIterator[/MAN] bzw. [MAN]ArrayAccess[/MAN] zielführend sind, um native Arrayzugriffe/schleifen zu ermoeglichen.
Einen Kommentar schreiben:
-
PHP-Code:function object2array($obj) {
$_arr = is_object($obj) ? get_object_vars($obj) : $obj;
foreach ($_arr as $key => $val) {
$val = (is_array($val) || is_object($val)) ? object2array($val) : $val;
$arr[$key] = $val;
}
return $arr;
}
Einen Kommentar schreiben:
-
Hallo mAy^day,
das ist (in PHP 5) nicht ganz korrekt und der objektorientierte Ansatz sieht das auch nicht so vor. Bei deinem Code bekommst du IMHO in PHP 5 einen Fehler bei privaten und geschützten Membern.
Einen Kommentar schreiben:
-
Re: Object as Array
Zitat von micburIch habe ein Object. Ich würde gerne durch die ganzen Felder in dem Object durchgehen. Wie komme ich da hin?PHP-Code:
while (list($key, $value) = each($object)) {
echo $key.' => '.$value.'
';
}
Einen Kommentar schreiben:
-
Hallo micbur,
im objektorientierten Ansatz implementiert man hier to*()-Funktionen. Üblicherweise gibt es in JAVA toString() oder toChar(). Ich würde an deiner Stelle hier eine toArray()-Methode implementieren, die dir die Klassen-Variablen als Array zurück gibt. Das kann ungefähr so aussehen:
PHP-Code:
...
function to array(){
return get_class_vars($this);
}
?>
Einen Kommentar schreiben:
-
Wenn Sie ein Objekt in ein Array umwandeln, bekommen Sie die Eigenschaften (Mitgliedsvariablen) des Objekts als Elemente des Arrays. Die Schlüssel sind die Namen der Mitgliedsvariablen.
Einen Kommentar schreiben:
Einen Kommentar schreiben: