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

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

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

作成日: 更新日:

基本的な使い方

getArrayCopyメソッドは、ArrayObjectオブジェクトが保持しているデータのコピーを、PHPのネイティブな配列として取得するために実行するメソッドです。ArrayObjectは、オブジェクトでありながら配列のように振る舞うことができる便利なクラスですが、その型はあくまでオブジェクトであり、厳密には配列(array型)ではありません。そのため、is_array()関数などで型を判定すると偽(false)を返します。このメソッドを使用することで、ArrayObjectの内部データを、PHPの豊富な組み込み配列関数(例えば array_maparray_filter など)で処理しやすい純粋な配列に変換できます。重要な点として、このメソッドが返すのは元のデータの「コピー」であるため、取得した配列に対して要素の追加や変更を行っても、元のArrayObjectオブジェクトの状態には一切影響を与えません。これにより、データの意図しない書き換えを防ぎ、安全に配列操作を行うことが可能になります。オブジェクトとしてデータを管理しつつ、必要に応じて手続き的な配列処理を行いたい場合に非常に役立ちます。

構文(syntax)

1<?php
2
3$arrayObject = new ArrayObject(['id' => 1, 'name' => 'Taro']);
4
5$array = $arrayObject->getArrayCopy();
6
7var_dump($array);

引数(parameters)

引数なし

引数はありません

戻り値(return)

array

ArrayObjectの内部に保持されている配列のコピーを返します。

サンプルコード

ArrayObjectから配列を取得する

1<?php
2
3/**
4 * ArrayObject::getArrayCopy() メソッドの使用例を示します。
5 * このメソッドは、ArrayObject インスタンスの内容を通常の PHP 配列として返します。
6 */
7function demonstrateArrayObjectGetArrayCopy(): void
8{
9    // (1) ArrayObject のインスタンスを作成し、初期データを設定します。
10    // ここでは連想配列を使用します。
11    $originalData = ['itemA' => 100, 'itemB' => 200, 'itemC' => 150];
12    $arrayObject = new ArrayObject($originalData);
13
14    echo "--- 元の ArrayObject の内容 ---\n";
15    var_dump($arrayObject);
16
17    // (2) getArrayCopy() メソッドを使って、ArrayObject の内容を
18    //     通常の PHP 配列としてコピーし取得します。
19    $copiedArray = $arrayObject->getArrayCopy();
20
21    echo "\n--- getArrayCopy() で取得した通常の配列の内容 ---\n";
22    var_dump($copiedArray);
23
24    // (3) 取得した $copiedArray が通常の PHP 配列として扱えることを示します。
25    //     例えば、配列の要素にアクセスしたり、変更したりできます。
26    echo "\n--- 取得した配列の操作例 ---\n";
27    echo "itemB の値: " . $copiedArray['itemB'] . "\n";
28
29    // 取得した配列は元の ArrayObject のコピーであるため、
30    // 片方を変更してももう片方には影響しません。
31    $arrayObject['itemA'] = 300; // ArrayObject の値を変更
32    $copiedArray['itemC'] = 400; // コピーした配列の値を変更
33
34    echo "\n--- 変更後の ArrayObject とコピーした配列の比較 ---\n";
35    echo "ArrayObject の itemA: " . $arrayObject['itemA'] . "\n"; // 300
36    echo "コピーした配列の itemA: " . $copiedArray['itemA'] . "\n"; // 100 (変更されていない)
37
38    echo "ArrayObject の itemC: " . $arrayObject['itemC'] . "\n"; // 150 (変更されていない)
39    echo "コピーした配列の itemC: " . $copiedArray['itemC'] . "\n"; // 400
40}
41
42// 関数を実行し、サンプルコードの動作を確認します。
43demonstrateArrayObjectGetArrayCopy();

ArrayObject::getArrayCopy()メソッドは、PHPでArrayObjectインスタンスが保持しているデータを、通常のPHP配列として取得するために使用します。ArrayObjectは、配列に似たオブジェクトとして便利な機能を提供しますが、時には通常の配列として扱いたい場合があります。このメソッドは引数を一切取らず、呼び出すだけでArrayObjectの現在の内容を新しいPHP配列としてコピーして返します。

このメソッドの重要な特徴は、返されるのが元のArrayObjectとは完全に独立した「値のコピー」である点です。そのため、getArrayCopy()で取得した配列の内容を変更しても、元のArrayObjectのデータには影響しません。また、その逆も同様です。これにより、元のデータへの意図しない変更を心配することなく、安全に配列データを操作できます。

サンプルコードでは、まず連想配列で初期化されたArrayObjectを作成し、その内容を表示しています。次にgetArrayCopy()メソッドを呼び出して、このArrayObjectの内容を通常のPHP配列として取得し、取得した配列の内容も確認しています。最後に、元のArrayObjectと取得した配列のそれぞれを独立して変更できることを示し、両者が異なるメモリ領域に存在する独立したデータであることが明確に分かります。この機能は、データの一貫性を保ちながら柔軟な操作を可能にするため、システム開発で非常に役立ちます。

ArrayObject::getArrayCopy()は、ArrayObjectインスタンスのデータを独立した通常のPHP配列として「コピー」して返すメソッドです。この「コピー」という点が特に重要で、取得した配列を変更しても、元のArrayObjectには影響しませんし、その逆も同様です。そのため、両者が独立していることを理解して利用してください。

ArrayObjectはオブジェクトとして、通常のPHP配列とは振る舞いが異なる場面があるため、純粋な配列として扱いたい場合や、既存の配列操作関数に渡したい場合にこのメソッドを利用すると安全です。これにより、意図しない参照による変更を防ぎ、データの一貫性を保つことができます。取得した配列は、もはや元のArrayObjectとは関連がありませんので、安心して配列としての操作が可能です。

ArrayObjectを配列に変換する

1<?php
2
3/**
4 * ArrayObject::getArrayCopy() メソッドの基本的な使用例を示します。
5 * このメソッドは、ArrayObject インスタンスの内容を通常の PHP 配列として返します。
6 */
7function demonstrateGetArrayCopy(): void
8{
9    // ① ArrayObject のインスタンスを作成し、初期データを設定します。
10    // ArrayObject は、配列のように振る舞うオブジェクトです。
11    $arrayObject = new ArrayObject([
12        'apple' => 100,
13        'banana' => 150,
14        'orange' => 120,
15    ]);
16
17    echo "--- 元の ArrayObject の内容 ---" . PHP_EOL;
18    // ArrayObject は直接 echo できないため、var_dump で内容を確認します。
19    var_dump($arrayObject);
20
21    // ② ArrayObject に新しい要素を追加します。
22    $arrayObject['grape'] = 200;
23
24    echo PHP_EOL . "--- 要素を追加した後の ArrayObject の内容 ---" . PHP_EOL;
25    var_dump($arrayObject);
26
27    // ③ getArrayCopy() メソッドを呼び出し、ArrayObject の内容を通常の配列として取得します。
28    // 戻り値は「array」型になります。
29    $normalArray = $arrayObject->getArrayCopy();
30
31    echo PHP_EOL . "--- getArrayCopy() で取得した通常の配列 ---" . PHP_EOL;
32    // 取得した配列の内容を var_dump で確認します。
33    var_dump($normalArray);
34
35    // ④ 取得した配列が通常の配列であることを確認するため、要素にアクセスしてみます。
36    echo PHP_EOL . "取得した配列から 'banana' の値にアクセス: " . $normalArray['banana'] . PHP_EOL;
37
38    // 補足: getArrayCopy() は、元の ArrayObject のコピーを返します。
39    // そのため、取得した配列を変更しても元の ArrayObject には影響しません。
40    $normalArray['apple'] = 50; // 取得した配列の値を変更
41    echo PHP_EOL . "--- 取得した配列の 'apple' の値を変更した後 ---" . PHP_EOL;
42    echo "変更後の取得した配列の 'apple': " . $normalArray['apple'] . PHP_EOL;
43    echo "元の ArrayObject の 'apple': " . $arrayObject['apple'] . PHP_EOL; // 元の ArrayObject の値は変わらない
44}
45
46// 関数を実行します。
47demonstrateGetArrayCopy();
48
49?>

PHPのArrayObject::getArrayCopy()メソッドは、配列のように振る舞う特殊なオブジェクトであるArrayObjectの内部データを、通常のPHPの配列(array型)としてコピーして取得する際に利用されます。このメソッドは引数を一切取らず、ArrayObjectが現在保持している全ての要素を新たなarrayとして返します。

サンプルコードでは、まず初期値を持つArrayObjectを作成し、その後に新しい要素を追加しています。ArrayObjectの状態を確認した後、$arrayObject->getArrayCopy()を呼び出すことで、その時点のArrayObjectの内容が、完全に独立した通常の配列として$normalArrayに格納されます。

getArrayCopy()によって返された$normalArrayは、PHPの通常の配列と同様に、キーを使って値にアクセスできます。このメソッドの重要なポイントは「コピー」を返す点です。つまり、$normalArrayの要素の値を変更しても、元の$arrayObjectには影響を与えません。元のArrayObjectのデータはそのまま保持されるため、ArrayObjectのデータを安全に操作したり、異なる文脈で利用したりする際に役立ちます。

ArrayObject::getArrayCopy()メソッドは、ArrayObjectの内容を新しい通常のPHP配列として「コピー」して返します。最も重要な注意点は、このメソッドが返すのは元のArrayObjectの複製(コピー)であることです。そのため、getArrayCopy()で取得した配列を変更しても、元のArrayObjectのデータには影響がありません。初心者はこの点を誤解し、元のデータも変更されると考える間違いを犯しやすいので、特に注意が必要です。ArrayObjectは通常の配列とは異なりオブジェクトであるため、このメソッドはオブジェクトの内容を配列として簡単に取り出す際に役立ちます。引数はなく、常にPHPのarray型を返します。

関連コンテンツ

関連プログラミング言語