Java経験者がPHPでハマる10選の1 「型のゆるさ(動的型付け)に戸惑う」
こんにちは。ゆうせいです。
Javaをしっかり学んだ人がPHPに移行すると、「似てるはずなのに全然感覚が違う!」と驚くことが多いんです。
同じオブジェクト指向言語ですが、設計思想や実行環境、型の扱い方などがかなり異なります。
Java経験者がPHPを学ぶときにハマりやすいポイントを10個にまとめ、具体的な解説と回避方法をお伝えしています。
まず「型のゆるさ(動的型付け)に戸惑う」を深掘りします。
型のゆるさ(動的型付け)を理解する
JavaからPHPに移ると最初に強く感じるのは型の管理の違いです。
Javaは「型の厳しい門番」が立っている世界。変数には必ず型があり、それが変わるとコンパイルエラーになります。
PHPはその門番がいません。代わりに「何でも屋さん」がいて、必要に応じて変数の中身を変えたり、型変換したりしてくれます。
一見便利ですが、便利すぎて事故も多いのです。
JavaとPHPの比較
項目 | Java | PHP |
---|---|---|
型付け | 静的型付け(static typing) | 動的型付け(dynamic typing) |
宣言方法 | int num = 5; | $num = 5; |
実行時型変換 | 原則なし(キャストが必要) | 自動型変換(type juggling) |
比較演算 | 厳密(型も比較) | 緩い(型変換後に比較) |
サンプルコードと落とし穴
Javaの場合
int num = 5;
num = "hello"; // コンパイルエラー: 型不一致
PHPの場合
$num = 5;
$num = "hello"; // 実行可能。$numは文字列に変わる
自動型変換によるバグの例
var_dump(0 == "0"); // bool(true)
var_dump(0 == "abc"); // bool(true) ← !? なぜ?
なぜこうなるのか
PHPは比較時に文字列を数値に変換します。"abc"
は変換すると0
になり、0 == 0
と判定されます。
回避策
PHP 7以降は次の方法で型の安全性を上げられます。
- strict_typesを有効化
<?php
declare(strict_types=1);
これにより関数の引数や戻り値の型チェックが厳格になります。
- 型宣言を積極的に使う
function add(int $a, int $b): int {
return $a + $b;
}
- 厳密比較(===)を使う
var_dump(0 === "0"); // bool(false)
イメージで理解する
- Javaは「学校の制服ルール」:服(型)が決まっていて違うものは着られない。
- PHPは「私服OKの学校」:服(型)は自由だけど、ドレスコードを守らないと混乱する。
この型のゆるさは、短期開発やプロトタイプ作成では爆速のメリットになります。
しかし長期開発や大規模プロジェクトでは型宣言+strict_typesがほぼ必須です。
次は「アクセス修飾子のデフォルト挙動の違い」を掘り下げます。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
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「コンストラクタの書き方の違い」