過去数年間、JSONはデータインターチェンジ形式の王として引き継いできました。 JSONの前に、XMLはねぐらを支配しました。複雑なデータのモデリングが得意でしたが、解析することは困難であり、非常に冗長です。 JSONは、非常に人間の読みやすい形式であり、迅速に解析し、その単純なキー/バリュー表現がXMLのすべての冗長性をカットするため、豊富なAjax駆動型サイトの急増で本当に離陸しました。
私たちは皆、より少ないコードを書くことでメンテナンスを必要とし、バグを導入することが少ないことが、私たち全員が達成したい目標であることに同意できると思います。この投稿では、JSonserializableと呼ばれるPHP 5.4.0で導入された、あまり知られていないインターフェイスを紹介したいと思います。
想像できるように、このアプローチはすぐに面倒になります。この配列コードをアプリケーション全体で複製する必要があるだけでなく、必然的により多くの変更が来たときにすべてのインスタンスを更新することを忘れないでください。しかし、別の方法があります。
ただし、このアプローチには独自の欠点があります。やって来て、お客様を使用したい他の人は、簡単にチェックできるものではないため、このTojsonメソッドに注意する必要があるため、正確なドキュメントが必要です。また、この方法は good
最後に、jsonserializableインターフェイスを入力します。これにより、悪いシナリオの維持可能性の利点と、ugいシナリオのすべての柔軟性が得られます。このインターフェイスを使用するには、古いバージョンよりも多くの改善があるため、とにかく本当にやるべきPHP 5.4.0を実行する必要があります。
ご覧のとおり、インターフェイスをクラスに追加し、クラスの本文にJsonserializeメソッドを追加してインターフェース契約を満たすことにより、JSonserializableを実装します。
このメソッドをトリガーしたいときに魔法が届きます。JSONがこのクラスのインスタンスをエンコードするだけで、このメソッドは自動的に呼ばれ、データの配列が返され、エンコードされます!クラスがインターフェイスを実装したので、このクラスがJsonserializableのインスタンスであるかどうかを確認できることから利益を得ることができます。必要に応じて、メソッドのヒントを入力して、jsonserializableインターフェイスが渡されることを確認することもできます。 上記の例はもちろん不自然ですが、このインターフェースを使用して自分で使用するように促すことの利点を実証することができたことを願っています。
Jsonserializableインターフェイスに関するよくある質問(FAQ) PHPのJSonserializableインターフェイスの主な目的は何ですか?jSonserializableインターフェイスにより、クラス内のJSonserializeメソッドの実装が可能になります。これは、クラスのインスタンスがJSONエンコードされているときに自動的にトリガーされます。このメソッドは、オブジェクトデータの配列を返し、変更が必要な場合にデータを更新するプロセスを簡素化します。
JSonserializableインターフェイスを実装すると、コードの保守性が向上し、バグを導入する可能性が低下します。これは、重複を削除し、他の人がJSonserializableのインスタンスであるかどうかをチェックすることでオブジェクトの能力をテストしやすくするためです。
ugly
しかし、私たち全員がいつか経験してきたので、私たちが行った仮定は、瞬間的な通知で偽りを証明することができます。顧客クラスにさらにデータを追加するように求められる要件が得られる場合があります。その新しいデータを消費サービスに返品する必要があり、多くの場所でこれを行いたいと思います。
幸いなことに、最初の変更要求が届いたときは賢かったので、配列の複製が悪夢になることに気付いたので、私たちがやろうと決めたのは、オブジェクトのエンコード機能を内面化し、メンテナンスの問題を削除し、減少させることでした。バグを導入する可能性。<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>
要約
この簡単な実装により、複製を削除し、メンテナンスの量を減らし、バグを導入する可能性を減らしました。また、他の人がコードを使用して、jsonserializableのインスタンスであるかどうかを確認してオブジェクトの能力をエンコードする能力をテストすることを簡単にしました。
PHPのJSonserializableインターフェイスは、主にオブジェクトのJSON表現をカスタマイズするために使用されます。オブジェクトがjson_encode()関数に渡されると、jsonserializableインターフェイスを実装する場合、jsonserialize()メソッドが呼び出され、オブジェクトがどのようにシリアル化するかを決定することができます。これにより、JSON出力に対する高いレベルの制御が提供され、エンコードされる前に複雑なデータ構造を管理したり、データの変換を実行しやすくします。 🎜> jSonserialize()メソッドは、jsonserializableインターフェイスの一部です。このインターフェイスを実装するオブジェクトがjson_encode()に渡されると、jsonserialize()メソッドが自動的に呼び出されます。この方法では、JSONにシリアル化する準備ができているデータ構造を返す必要があります。これは、配列、文字列、数字、または別のオブジェクトでもあります。返されたデータは、json_encode()によってjson文字列にエンコードされます。 jSonserialize()メソッドは、オブジェクトのプライベートプロパティと保護されたプロパティにアクセスできるため、シリアル化のために返されるデータにこれらを含めることができます。これは、オブジェクトの内部状態をJSONにエンコードしたい場合に役立ちますが、クラス内でプロパティをプライベートまたは保護したままにしておきます。 > jsonserialize()メソッド内に例外がスローされている場合、json_encode()によってキャッチされません。代わりに、json_encode()はfalseを返し、例外をキャッチして個別に処理する必要があります。 jsonserialize()内の例外を処理するには、メソッド自体内でトライキャッチブロックを使用して、例外を管理し、シリアル化のために有効なデータ構造を返すことができます。 ?
以上がJSonserializableインターフェイスの使用方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。