Java経験者がPHPでハマる10選の4 「配列の概念の違い」
こんにちは。ゆうせいです。
Javaをしっかり学んだ人がPHPに移行すると、「似てるはずなのに全然感覚が違う!」と驚くことが多いんです。
同じオブジェクト指向言語ですが、設計思想や実行環境、型の扱い方などがかなり異なります。
Java経験者がPHPを学ぶときにハマりやすいポイントを10個にまとめ、具体的な解説と回避方法をお伝えしています。
今回は、4つ目「配列の概念の違い」を掘り下げます。
配列の概念の違い
JavaとPHPでは「配列(array)」という同じ単語を使っていても、中身の正体と性質がまったく違うため、移行時にかなり混乱します。
Java経験者は配列といえば「固定長・同一型・順序保証あり」というイメージを持ちますが、PHPの配列はもっと自由で、連想配列(ハッシュテーブル)+順序付きリストのハイブリッド構造です。
JavaとPHPの配列比較
項目 | Java | PHP |
---|---|---|
長さ | 固定(再代入不可) | 可変(自由に追加・削除可能) |
型 | 同一型のみ | 型混在OK |
インデックス | 0から始まる整数 | 整数キーまたは文字列キー(混在可能) |
順序 | 保証される | 基本的に保持されるが、キーの扱いで変化 |
実体 | メモリ上の連続領域 | 連想配列(ハッシュテーブル) |
サンプルコード
Java
int[] nums = {1, 2, 3};
System.out.println(nums[0]); // 1
nums[3] = 4; // コンパイルエラー(範囲外)
PHP(数値キー)
$arr = [1, 2, 3];
echo $arr[0]; // 1
$arr[] = 4; // 配列末尾に追加
PHP(文字キー)
$user = ["name" => "Yamada", "age" => 20];
echo $user["name"]; // Yamada
混在も可能(PHPの自由度)
$mixed = [
0 => "apple",
"color" => "red",
2 => 100
];
こういう構造はJavaの配列には存在しません。JavaでやるならMap
やList
を使う必要があります。
ハマりポイント1:キーの自動再採番
PHPで数値キー配列に要素を削除すると、キーは詰められません。
$arr = [10, 20, 30];
unset($arr[1]);
print_r($arr);
// Array ( [0] => 10 [2] => 30 )
Java脳だと「[0]=10, [1]=30になるはず」と思ってしまう。
ハマりポイント2:ソート時の挙動
キー付き配列をsort()
すると、キーが全部リセットされます。
$assoc = ["b" => 2, "a" => 1];
sort($assoc);
print_r($assoc);
// Array ( [0] => 1 [1] => 2 )
イメージで理解する
- Javaの配列:同じ形の箱が順番に並んだ棚(番号順でしかアクセスできない)
- PHPの配列:棚だけど、棚ごとにラベル(キー)が自由につけられ、ラベルは数字でも文字でもOK
実務での推奨
- 数値キー配列(順序リスト)か文字キー配列(連想配列)かを明確に使い分ける
- 複雑な構造なら
array
よりSplFixedArray
やArrayObject
、あるいはstdClass
を検討 - JSONとの変換を多用する場合はキーの型に注意する
「Javaは整列棚、PHPは自由ラベル棚」というイメージで一瞬で理解できますね。
次は5つ目「例外処理の違い」に進めると、エラー発生時の思想の違いが見えてきます。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
山崎講師2025年8月12日Java経験者のためのPHP入門
山崎講師2025年8月12日Java経験者がPHPでハマる10選の1 「型のゆるさ(動的型付け)に戸惑う」
山崎講師2025年8月12日Java経験者がPHPでハマる10選の2 「アクセス修飾子のデフォルト挙動の違い」
山崎講師2025年8月12日Java経験者がPHPでハマる10選の3「コンストラクタの書き方の違い」