suchen
HeimBackend-EntwicklungPHP-TutorialSo verwenden Sie die JsonSerializable -Schnittstelle

How to Use the JsonSerializable Interface

So verwenden Sie die JsonSerializable -Schnittstelle

In den letzten Jahren hat JSON als König der Datenwechselformate übernommen. Vor JSON regierte XML den Schlaf. Es war großartig darin, komplexe Daten zu modellieren, aber es ist schwierig zu analysieren und ist sehr ausführlich. JSON startete wirklich mit der Verbreitung reicher Ajax -gesteuerter Websites, da es sich um ein sehr menschlich lesbares Format handelt, das schnell analysiert und seine einfache Schlüssel-/Wertdarstellung die gesamte Ausführlichkeit von XML abnimmt.

Ich denke, wir könnten uns alle einig sein, dass das Schreiben weniger Code, das wiederum weniger Wartung erfordert und weniger Fehler einführt, ein Ziel ist, das wir alle erreichen möchten. In diesem Beitrag möchte ich Ihnen eine wenig bekannte Schnittstelle vorstellen, die in PHP 5.4.0 als JsonSerializable eingeführt wurde.

Bevor die JsonSerializable -Schnittstelle verfügbar war, bedeutete die Rückgabe einer JSON -codierten Darstellung eines Objekts für einen konsumierenden Dienst eines von zwei Dingen.

Key Takeaways

  • Die JsonSerializable -Schnittstelle in PHP 5.4.0 bietet eine effizientere Möglichkeit, eine von JSON codierte Darstellung eines Objekts zurückzugeben, wodurch die Notwendigkeit der Erstellung einer Datenstruktur außerhalb des Objekts oder zur Internalisierung der Codierungsfunktionen innerhalb des Objekts.
  • Die JsonSerializable -Schnittstelle ermöglicht die Implementierung einer JsonSerialize -Methode innerhalb der Klasse, die automatisch ausgelöst wird, wenn eine Instanz der Klasse JSON codiert ist. Diese Methode gibt ein Array der Objektdaten zurück und vereinfacht den Prozess der Aktualisierung der Daten, wenn Änderungen erforderlich sind.
  • Implementierung der JsonSerializable -Schnittstelle verbessert die Wartbarkeit der Code und verringert die Wahrscheinlichkeit, Fehler einzuführen, da sie die Duplikation beseitigt und es anderen erleichtert, die Fähigkeit des Objekts zu testen, durch Überprüfen zu prüfen, ob es sich
  • das hässliche

Der erste Ansatz bestand darin, eine Datenstruktur außerhalb des Objekts zu konstruieren, das alle Daten enthielt, die wir freilegen wollten.

Wir haben hier ein Array verwendet, um die Daten aus dem Kundenobjekt zu halten, das wir codieren wollten, aber es könnte genauso leicht eine STD -Klasse gewesen sein.
<span><span><?php </span></span><span>
</span><span><span>class Customer
</span></span><span><span>{
</span></span><span>
</span><span>    <span>private $email = null;
</span></span><span>    <span>private $name = null;
</span></span><span>
</span><span>    <span>public function __construct($email, $name)
</span></span><span>    <span>{
</span></span><span>        <span>$this->email = $email;
</span></span><span>        <span>$this->name = $name;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function getName()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->name;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function getEmail()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->email;
</span></span><span>    <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>$customer = new Customer('customer@sitepoint.com', 'Joe');
</span></span><span>
</span><span><span>$data = [
</span></span><span>    <span>'customer' => [
</span></span><span>        <span>'email' => $customer->getEmail(),
</span></span><span>        <span>'name' => $customer->getName()
</span></span><span>    <span>]
</span></span><span><span>];
</span></span><span>
</span><span><span>echo json_encode($data);</span></span></span>

Dieser Ansatz war flexibel und diente in sehr einfachen Situationen, in denen wir wussten, dass sich das Kundenobjekt nicht ändern würde, und wir würden nur in diesem Format Kundendaten benötigen. Wir hatten auch die Möglichkeit, dieses Array aus anderen Quellen Daten zu diesem Array hinzuzufügen, wenn wir mussten.

Wie wir jedoch alle zu der einen oder anderen Zeit erlebt haben, können die Annahmen, die wir getroffen haben, zu einem Moment erwiesen werden. Wir können eine Anforderung erhalten, die uns auffordert, der Kundenklasse weitere Daten hinzuzufügen. Diese neuen Daten müssen in den Verbrauchsdienst zurückgegeben werden, und wir möchten dies an zahlreichen Stellen.

Wie Sie sich vorstellen können, wird dieser Ansatz schnell problematisch. Wir müssen diesen Array -Code nicht nur in unserer Anwendung duplizieren, wir müssen uns auch daran erinnern, alle diese Fälle zu aktualisieren, wenn weitere Änderungen zwangsläufig eingehen. Es gibt jedoch einen anderen Weg, das uns dabei hilft, einige dieser Probleme aufzuheben.

das schlechte

Zum Glück waren wir schlau, als die erste Änderungsanfrage eintrat und wir stellten fest, dass die Duplikation unseres Arrays ein Albtraum sein würde. Wir beschlossen also, diese Codierungsfunktionen in unserem Objekt zu verinnerlichen, die Wartungsprobleme zu entfernen und die Verringerung des Wahrscheinlichkeit, Fehler einzuführen.

<span><span><?php </span></span><span>
</span><span><span>class Customer
</span></span><span><span>{
</span></span><span>
</span><span>    <span>private $email = null;
</span></span><span>    <span>private $name = null;
</span></span><span>
</span><span>    <span>public function __construct($email, $name)
</span></span><span>    <span>{
</span></span><span>        <span>$this->email = $email;
</span></span><span>        <span>$this->name = $name;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function getName()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->name;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function getEmail()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->email;
</span></span><span>    <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>$customer = new Customer('customer@sitepoint.com', 'Joe');
</span></span><span>
</span><span><span>$data = [
</span></span><span>    <span>'customer' => [
</span></span><span>        <span>'email' => $customer->getEmail(),
</span></span><span>        <span>'name' => $customer->getName()
</span></span><span>    <span>]
</span></span><span><span>];
</span></span><span>
</span><span><span>echo json_encode($data);</span></span></span>

Wenn jetzt weitere Änderungsanforderungen eingehen, die mehr Daten hinzugefügt und aus dem Kundenobjekt zurückgegeben werden sollen, können wir einfach die Tojson -Methode aktualisieren.

Dieser Ansatz hat jedoch seine eigenen Nachteile. Jeder andere, der auftritt und unseren Kunden nutzen möchte, muss sich dieser Tojson -Methode bewusst sein, da dies nicht leicht überprüft werden kann. Daher benötigen wir eine genaue Dokumentation. Wir müssen uns auch daran erinnern, dass diese Methode jetzt JSON zurückgibt (obwohl wir die Serialisierung außerhalb der Methode verschieben können). Dies macht die Kombination von Kundendaten mit anderen Datenquellen unangenehmer, da wir darauf achten müssen, dass wir das Ergebnis dieser Methode nicht erneut codieren, da dies einige böse Fehler verursachen würde.

das gute

Geben Sie schließlich die JsonSerializable -Schnittstelle ein. Dies gibt uns die Flexibilität des hässlichen Szenarios mit den Vorteilen der Wartbarkeit des schlechten Szenarios. Um diese Schnittstelle zu verwenden, müssen Sie jedoch PHP 5.4.0 ausführen, was Sie sowieso tun sollten, da es viele Verbesserungen gegenüber älteren Versionen gibt.

Also, zu Geschäft.

<span><span><?php </span></span><span>
</span><span><span>class Customer
</span></span><span><span>{
</span></span><span>
</span><span>    <span>public $email = null;
</span></span><span>    <span>public $name = null;
</span></span><span>
</span><span>    <span>public function __construct($email, $name)
</span></span><span>    <span>{
</span></span><span>        <span>$this->email = $email;
</span></span><span>        <span>$this->name = $name;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function getName()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->name;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function getEmail()
</span></span><span>    <span>{
</span></span><span>        <span>return $this->email;
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>public function toJson()
</span></span><span>    <span>{
</span></span><span>        <span>return json_encode([
</span></span><span>            <span>'customer' => [
</span></span><span>                <span>'email' => $this->getEmail(),
</span></span><span>                <span>'name' => $this->getName()
</span></span><span>            <span>]
</span></span><span>        <span>]);
</span></span><span>    <span>}
</span></span><span><span>}
</span></span><span>
</span><span><span>$customer = new Customer('customer@sitepoint.com', 'Joe');
</span></span><span>
</span><span><span>echo $customer->toJson();</span></span></span>

Wie Sie sehen können, implementieren wir JsonSerializable, indem wir die Schnittstelle zu unserer Klasse hinzufügen und dann eine jsonserialisierende Methode in den Körper unserer Klasse hinzufügen, um den Schnittstellenvertrag zu erfüllen.

In der JsonSerialize -Methode konstruieren und geben wir ein Array der Objektdaten zurück, wie wir es mit den anderen Beispielen getan haben. Wenn sich noch einmal ändert, können wir diese eine Methode einfach aktualisieren. Sie werden feststellen, dass die JsonSerialize -Methode nur ein Array zurückgibt.

Die Magie kommt, wenn Sie diese Methode auslösen möchten. Alles, was wir jetzt tun müssen, ist JSON COD eine Instanz dieser Klasse, und diese Methode wird automatisch aufgerufen, das Array der Daten wurde zurückgegeben und dann codiert! Nachdem die Klasse eine Schnittstelle implementiert, profitieren wir davon, zu prüfen, ob diese Klasse eine Instanz von JsonSerializable ist. Wenn Sie wollten, können Sie auch Hinweise in Methoden eingeben, um sicherzustellen, dass eine jsonserialisierbare Schnittstelle übergeben wird.

Zusammenfassung

Mit dieser einfachen Implementierung haben wir die Duplikation entfernt, die Wartungsmenge verringert und die Wahrscheinlichkeit, Fehler einzuführen, verringert. Wir haben es auch trivial gemacht, dass eine andere Person, die unseren Code verwendet, um die Fähigkeit des Objekts zu testen, durch Überprüfung zu kodieren, ob es sich um eine Instanz von JsonSerializable handelt.

Die obigen Beispiele sind natürlich erfunden. Ich hoffe jedoch, dass ich es geschafft habe, die Vorteile der Verwendung dieser Schnittstelle zu demonstrieren und Sie dazu zu inspirieren, sie selbst zu verwenden.

häufig gestellte Fragen (FAQs) zu JsonSerializable Interface

Was ist der Hauptzweck der jsonserialisierbaren Schnittstelle in PHP? Wenn ein Objekt an die Funktion json_encode () übergeben wird und die JsonSerializable -Schnittstelle implementiert, wird die Methode jsonSerialize () aufgerufen, sodass das Objekt diktieren kann, wie es serialisiert werden soll. Dies bietet ein hohes Maß an Kontrolle über die JSON -Ausgabe und erleichtert es, komplexe Datenstrukturen zu verwalten oder Transformationen in den Daten durchzuführen, bevor sie codiert werden. 🎜> Die JsonSerialize () -Methode ist Teil der JsonSerializable -Schnittstelle. Wenn ein Objekt, das diese Schnittstelle implementiert, an JSON_Encode () übergeben wird, wird die Methode jsonSerialize () automatisch aufgerufen. Diese Methode sollte eine Datenstruktur zurückgeben, die bereit ist, in JSON serialisiert zu werden. Dies kann ein Array, eine Zeichenfolge, eine Zahl oder sogar ein anderes Objekt sein. Die zurückgegebenen Daten werden dann von JSON_Encode () in eine JSON -String codiert. Die JsonSerialize () -Methode hat Zugriff auf die privaten und geschützten Eigenschaften des Objekts, sodass Sie diese in die für die Serialisierung zurückgegebenen Daten einbeziehen können. Dies kann nützlich sein, wenn Sie den internen Zustand eines Objekts in JSON codieren möchten, aber die Eigenschaften in der Klasse privat oder geschützt halten. > Wenn eine Ausnahme in die Methode jsonSerialize () geworfen wird, wird sie nicht von json_encode () gefangen. Stattdessen wird JSON_Encode () falsch zurückgegeben, und die Ausnahme muss separat gefangen und behandelt werden. Um Ausnahmen in JsonSerialize () zu verarbeiten, können Sie einen Try-Catch-Block innerhalb der Methode selbst verwenden, sodass Sie die Ausnahme verwalten und eine gültige Datenstruktur für die Serialisierung zurückgeben können. ? Um JSON zu dekodieren, würden Sie die Funktion json_decode () verwenden. Sie können jedoch eine Methode in Ihrer Klasse erstellen, um die Dekodierung und Rekonstruktion eines Objekts von einem JSON -String zu verarbeiten.

Wie kann ich die JsonSerializable -Schnittstelle mit verschachtelten Objekten verwenden? Wenn JSON_Encode () auf das übergeordnete Objekt aufgerufen wird, wird auch JsonSerialize () für jedes verschachtelte Objekt aufgerufen, sodass jeder vorliegt, wie es serialisiert werden soll. >

Ja, Sie können die JsonSerializable -Schnittstelle mit Arrays verwenden. Wenn das Array Objekte enthält, sollte jedes Objekt die JsonSerializable -Schnittstelle implementieren. Wenn JSON_Encode () auf das Array aufgerufen wird, wird JsonSerialize () in jedem Objekt innerhalb des Arrays aufgerufen, sodass jeder vorliegt, wie es serialisiert werden soll. ? Dies kann ein Array mit benutzerdefinierten Schlüsseln, einer Zeichenfolge, einer Nummer oder einem anderen Objekt sein. Die Datenstruktur, die Sie von JsonSerialize () zurückgeben, sind die Daten, die in JSON codiert werden. Mehrdimensionale Arrays. Wenn die Arrays Objekte enthalten, sollte jedes Objekt die JsonSerializable -Schnittstelle implementieren. Wenn json_encode () auf das mehrdimensionale Array aufgerufen wird, wird JsonSerialize () in jedem Objekt innerhalb des Arrays aufgerufen, sodass jeder vorhanden ist, wie es serialisiert werden soll. Arrays? Wenn das Array Objekte enthält, sollte jedes Objekt die JsonSerializable -Schnittstelle implementieren. Wenn json_encode () auf das nicht assoziative Array aufgerufen wird, wird JsonSerialize () in jedem Objekt innerhalb des Arrays aufgerufen, sodass jeder vorliegt, wie es serialisiert werden soll.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie die JsonSerializable -Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)Mar 03, 2025 am 10:49 AM

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Arbeiten mit Flash -Sitzungsdaten in LaravelArbeiten mit Flash -Sitzungsdaten in LaravelMar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagierenErstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagierenMar 04, 2025 am 09:33 AM

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Vereinfachte HTTP -Reaktion verspottet in Laravel -TestsVereinfachte HTTP -Reaktion verspottet in Laravel -TestsMar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsCurl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIsMar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

12 Beste PHP -Chat -Skripte auf Codecanyon12 Beste PHP -Chat -Skripte auf CodecanyonMar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Ankündigung von 2025 PHP Situation SurveyAnkündigung von 2025 PHP Situation SurveyMar 03, 2025 pm 04:20 PM

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio

Benachrichtigungen in LaravelBenachrichtigungen in LaravelMar 04, 2025 am 09:22 AM

In diesem Artikel werden wir das Benachrichtigungssystem im Laravel -Web -Framework untersuchen. Mit dem Benachrichtigungssystem in Laravel können Sie Benachrichtigungen an Benutzer über verschiedene Kanäle senden. Heute werden wir diskutieren, wie Sie Benachrichtigungen OV senden können

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)