PHP-Objekt, mehrere Eigenschaften
Ist es möglich, mehrere Eigenschaften gleichzeitig für ein Objekt in php?
Anstatt das zu tun:
$object->prop1 = $something;
$object->prop2 = $otherthing;
$object->prop3 = $morethings;
etwas wie:
$object = (object) array(
'prop1' => $something,
'prop2' => $otherthing,
'prop3' => $morethings
);
aber ohne überschreiben der object.
- Warum würden Sie wollen, zu verschleiern, was der code macht in dieser Art und Weise? Irgendwann in der Zukunft jemand (vielleicht), müssen diesen Kodex Lesen, etwas wie das zu tun wird nur machen es schwieriger zu verstehen.
- Warum nicht fügen Sie diese in eine php-Datei und führen Sie es? Anstatt zu Fragen ist hier, ob es funktioniert, probieren Sie es einfach selbst.
- Nur eine Hilfsfunktion erstellen, um es für Sie tun. Übergeben Sie in Objekt-und array.
- Es sieht schrecklich, und es ist mehr code, warum würden Sie brauchen?
- Werfen Sie einen Blick auf diese: bugs.php.net/bug.php?id=53266
- Ich erhalte ein array welches Werte benötigt werden asigned als Eigenschaften des Objekts, und ja, das Objekt hat funtcions und andere Eigenschaften, die erhalten werden müssen. Ich dachte nur, es war eine 'Magische' Weise zu tun. Sicher, ich kann es manuell machen, ich habe mich nur gefragt ..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht, wie Sie wollen. aber dies kann durch die Verwendung einer Schleife.
Sehen, nur 2 zusätzliche Zeilen.
{
und}
.Sollten Sie schauen,Objektorientierte PHP-Best Practices :
", da die setter-Funktionen return $this können Sie die Kette wie Sie so ist:"
Dies ist übrigens bekannt als fluent interface.
public function __set($k, $v){ $this->$k=$v; return $this;}
, dann ist es noch würde nicht funktionieren, weil(($obj->k="v")->k2)="v2";
ist syntax-Fehler.Ich würde Ihnen empfehlen, nicht es tun. Im ernst, nicht.
Dein code ist viel VIEL sauberer ist der erste Weg, es ist klarer, von Ihren Absichten, und Sie sind nicht obfocusing Ihren code in dem Maße, wo irgendwann in der Zukunft jemand angucken würde den code und denkt sich "Was zur Hölle war der idiot denken"?
Wenn Sie darauf bestehen, etwas zu tun, das ist eindeutig der falsche Weg zu gehen, können Sie immer erstellen Sie ein array iterieren und alle Eigenschaften in einer Schleife. Ich werde nicht geben Sie den code obwohl. Es ist böse.
Könnten Sie schreiben, einige setter für das Objekt, die das Objekt zurückgeben:
Könnten Sie dann tun:
Müssten Sie schreiben ein setter für jede Eigenschaft als
__set
Funktion ist nicht in der Lage, zurückgeben eines Wertes.Alternativ können Sie eine einzelne Funktion akzeptiert ein array von property => Werte und alles eingestellt?
auf und übergeben Sie das array:
Würde ich nicht wirklich tun....aber zum Spaß würde ich
dass Sie am Ende mit einer stdClass aus $Objekte öffentliche Eigenschaften, so verliert es seine Art.
$object === $old_object
ist nicht mehr wahr.Methode
objectThis()
zu transtypage Klasse array-Eigenschaften oder array zu stdClass. Mit direct transtypage (Objekt) entfernen würde numerischen index, sondern mit dieser Methode wird es halten den numerischen index.Merke ich, dies ist eine alte Frage, aber die zum nutzen von anderen, die über ihn kommen, löste ich dieses mir vor kurzem und wollte das Ergebnis
Natürlich gibt es keine Garantien eingebaut. Die wichtigste Einschränkung ist, dass die
updateObjFromArray
Funktion setzt Voraus, dass für jeden verschachtelten arrays innerhalb$array
, wird der entsprechende Schlüssel in$obj
bereits vorhanden ist und ein Objekt ist, das muss wahr sein, oder behandeln Sie wie ein Objekt wirft einen Fehler.Hoffe, das hilft! 🙂