Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】SplFixedArray::jsonSerialize()メソッドの使い方

jsonSerializeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

jsonSerializeメソッドは、PHP 8 のSplFixedArrayクラスに属し、そのインスタンスがJSON形式に変換される際に実行されるメソッドです。このメソッドは、PHPが提供するJsonSerializableインターフェースの一部として実装されており、json_encode()関数がSplFixedArrayオブジェクトを処理する際に自動的に呼び出されます。

SplFixedArrayは、固定サイズの配列を効率的に扱うためのクラスですが、そのデータをJSONとして外部システムに連携する場合、このjsonSerializeメソッドが非常に重要な役割を果たします。具体的には、このメソッドが呼び出されると、SplFixedArrayが現在保持しているすべての要素をPHPの標準的な配列として返します。返されたこの配列が、json_encode()によって最終的なJSON配列形式に変換されるデータとなります。

例えば、SplFixedArrayに格納された数値、文字列、あるいは他のオブジェクトなどが、JSON配列の要素として適切に表現されるようになります。これにより、SplFixedArrayの内部構造を直接意識することなく、その内容を汎用的なJSONデータとして出力し、ウェブサービスやAPI連携などで他のシステムと円滑にデータを交換することが可能になります。このメソッドは、オブジェクトの内部状態を外部で利用しやすいシンプルなデータ構造へと変換する役割を担っています。

構文(syntax)

1<?php
2$fixedArray = new SplFixedArray(2);
3$fixedArray[0] = 'valueA';
4$fixedArray[1] = 'valueB';
5
6$serializedData = $fixedArray->jsonSerialize();
7?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

array

SplFixedArray::jsonSerializeは、SplFixedArrayオブジェクトをJSONエンコード可能な配列形式で返します。

サンプルコード

SplFixedArrayをJSONに変換する

1<?php
2
3/**
4 * SplFixedArrayのjsonSerializeメソッドの使用例を示す関数です。
5 * SplFixedArrayはJsonSerializableインターフェースを実装しており、
6 * json_encode()でJSONに変換される際に、内部のデータをどのように
7 * シリアライズするかをjsonSerializeメソッドで定義しています。
8 */
9function demonstrateSplFixedArrayJsonSerialization(): void
10{
11    // 3つの要素を持つ固定サイズの配列を作成
12    $fixedArray = new SplFixedArray(3);
13
14    // 要素にデータを格納
15    $fixedArray[0] = 'Apple';
16    $fixedArray[1] = 123;
17    $fixedArray[2] = true;
18
19    echo "--- SplFixedArray の内容 ---\n";
20    print_r($fixedArray);
21
22    // json_encode() を使用して SplFixedArray を JSON 文字列に変換
23    // SplFixedArray::jsonSerialize() が内部で呼び出され、
24    // 配列の内容が通常のPHP配列としてJSONに変換されます。
25    // JSON_PRETTY_PRINT は、出力を見やすくするためのオプションです。
26    $jsonOutput = json_encode($fixedArray, JSON_PRETTY_PRINT);
27
28    echo "\n--- json_encode() による JSON 出力 ---\n";
29    echo $jsonOutput . "\n";
30
31    // jsonSerialize メソッドを直接呼び出した場合、通常のPHP配列が返されます。
32    $serializedArray = $fixedArray->jsonSerialize();
33    echo "\n--- jsonSerialize() メソッドの直接呼び出し結果 (PHP配列) ---\n";
34    print_r($serializedArray);
35}
36
37// 関数の実行
38demonstrateSplFixedArrayJsonSerialization();
39
40?>

PHP 8のSplFixedArray::jsonSerializeメソッドは、固定サイズの配列であるSplFixedArrayオブジェクトのデータをJSON形式に変換する際に利用されます。このメソッドは、JsonSerializableインターフェースを実装しており、引数は持ちません。

json_encode()関数を使ってSplFixedArrayをJSON文字列に変換しようとすると、json_encode()は自動的にこのjsonSerializeメソッドを内部で呼び出します。jsonSerializeメソッドは、SplFixedArrayに格納されている要素を通常のPHP配列として返します。このPHP配列がjson_encode()によってJSON文字列に変換されます。

サンプルコードでは、まずSplFixedArrayを作成し、要素を設定しています。json_encode($fixedArray, JSON_PRETTY_PRINT)を実行すると、内部でjsonSerializeが呼び出され、整形されたJSON文字列が出力されます。また、$fixedArray->jsonSerialize()と直接メソッドを呼び出すと、SplFixedArrayの内容が通常のPHP配列として取得できることが確認できます。このように、jsonSerializeは、オブジェクトのデータをJSONに変換可能なarray形式で提供する役割を担います。戻り値は常にarray型です。

SplFixedArray::jsonSerialize()メソッドは、JSON文字列を直接生成するわけではありません。このメソッドは、json_encode()関数がSplFixedArrayオブジェクトをJSON形式に変換する際に、内部のデータをどのようにPHPの配列として表現するかを定義するために利用されます。そのため、JSON文字列が必要な場合は、json_encode()と組み合わせて使用することが重要です。もしjsonSerialize()を直接呼び出すと、JSON化される前の通常のPHP配列が戻り値として得られます。また、SplFixedArrayは要素数が固定の配列であるため、後から要素を追加したり削除したりできない点にご注意ください。

SplFixedArray の再帰的 JSON シリアライズ

1<?php
2
3/**
4 * SplFixedArray を使用したネスト構造の JSON シリアライズの例。
5 *
6 * SplFixedArray は JsonSerializable インターフェースを実装しており、
7 * その jsonSerialize メソッドは json_encode 関数によって自動的に呼び出されます。
8 * この例では、SplFixedArray が他の SplFixedArray を含むネスト構造であっても
9 * 正しく JSON にシリアライズされることを示します。
10 */
11function demonstrateSplFixedArrayJsonSerialization(): void
12{
13    // ネストされる内側の SplFixedArray を作成
14    $innerArray = new SplFixedArray(3);
15    $innerArray[0] = 'inner_item_A';
16    $innerArray[1] = 123;
17    $innerArray[2] = true;
18
19    // トップレベルの外側の SplFixedArray を作成し、内側の配列を含める
20    $outerArray = new SplFixedArray(4);
21    $outerArray[0] = 'outer_item_1';
22    $outerArray[1] = 45.67;
23    $outerArray[2] = $innerArray; // ここで別の SplFixedArray オブジェクトをネスト
24    $outerArray[3] = null;
25
26    // json_encode を使用して SplFixedArray オブジェクトを JSON 文字列に変換します。
27    // SplFixedArray::jsonSerialize メソッドが json_encode によって内部的に呼び出され、
28    // オブジェクトが適切な配列構造に変換されます。
29    // JSON_PRETTY_PRINT は、出力されるJSONを読みやすいように整形するためのオプションです。
30    $jsonOutput = json_encode($outerArray, JSON_PRETTY_PRINT);
31
32    echo "SplFixedArray を JSON に変換した結果:\n";
33    echo $jsonOutput . "\n";
34}
35
36// サンプルコードの実行
37demonstrateSplFixedArrayJsonSerialization();
38

PHP 8のSplFixedArray::jsonSerializeメソッドは、固定サイズの配列であるSplFixedArrayオブジェクトをJSON形式に変換する際に使われる仕組みです。このメソッドは、json_encode関数にSplFixedArrayオブジェクトを渡した際に、json_encodeによって自動的に呼び出されます。SplFixedArrayの内部データをJSONに対応する配列の形にして返す役割があり、引数はなく、戻り値はarray型です。これにより、プログラム内のオブジェクトをJSONとして外部に出力できるようになります。

サンプルコードでは、SplFixedArrayの中にさらに別のSplFixedArrayが含まれる、ネストされた構造を作成しています。json_encodeは、このjsonSerializeメソッドを再帰的に利用することで、外側の配列だけでなく、その中に含まれる内側のSplFixedArrayもすべて適切にJSONの配列として変換します。結果として、元のオブジェクトの構造を保ったまま、読みやすいJSON文字列が生成されます。この機能を使うことで、プログラム内の複雑なデータ構造を簡単にJSON形式に変換し、Web APIでのデータ送受信など、外部システムとの連携に活用できます。

SplFixedArrayjson_encode関数に直接渡すと、内部でjsonSerializeメソッドが自動的に呼び出され、JSON形式に変換されます。これはSplFixedArrayJsonSerializableインターフェースを実装しているためです。

このとき、SplFixedArrayの要素に別のSplFixedArrayオブジェクトが含まれるネスト構造であっても、再帰的に正しくJSON化されますので、複雑なデータ構造も扱えます。

jsonSerializeメソッド自体はPHPの配列を返しますが、json_encodeがその配列を受け取ってJSON文字列を生成するため、明示的にこのメソッドを呼び出す必要はありません。SplFixedArrayは固定長配列である点もご留意ください。

関連コンテンツ