Java経験者がPHPでハマる10選の9 「名前空間の扱い方」
こんにちは。ゆうせいです。
Javaをしっかり学んだ人がPHPに移行すると、「似てるはずなのに全然感覚が違う!」と驚くことが多いんです。
同じオブジェクト指向言語ですが、設計思想や実行環境、型の扱い方などがかなり異なります。
Java経験者がPHPを学ぶときにハマりやすいポイントを10個にまとめ、具体的な解説と回避方法をお伝えしています。
次は、9つ目「名前空間の扱い方」を掘り下げます。
名前空間の扱い方
JavaとPHPでは、クラスや関数の重複を避けるための仕組みとして「パッケージ」や「名前空間」がありますが、その考え方と書き方に違いがあります。
Java経験者はPHPの名前空間を見て「なんだか似てるけど、微妙に動きが違う…」と感じるはずです。
JavaとPHPの比較表
項目 | Java | PHP |
---|---|---|
キーワード | package | namespace |
宣言位置 | ファイルの先頭に必須 | ファイルの先頭に推奨(複数も可だが非推奨) |
区切り文字 | ドット(. ) | バックスラッシュ(\ ) |
インポート | import | use |
デフォルト | java.lang パッケージが常に利用可能 | グローバル名前空間が常に利用可能 |
クラス検索 | パッケージ名+クラス名で一意 | 名前空間+クラス名で一意(ただし関数・定数も対象) |
Javaの例
package com.example.app;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> items = new ArrayList<>();
}
}
- パッケージ構造とディレクトリ構造が一致する必要がある
PHPの例
namespace App\Example;
use DateTime;
class Main {
public function run() {
$dt = new DateTime();
echo $dt->format('Y-m-d');
}
}
- 名前空間とディレクトリ構造は一致が推奨だが、必須ではない(PSR-4で統一可能)
ハマりポイント1:グローバル名前空間
PHPではnamespace
を書かないクラス・関数・定数は「グローバル名前空間」に属します。
同じ名前空間で別のクラスを定義すると競合します。
class DateTime {} // グローバルのDateTimeと競合
回避するには\DateTimeとバックスラッシュ付きで明示するか、
use
でインポートします。
ハマりポイント2:関数と定数も対象
Javaはクラスやインターフェイスが対象ですが、PHPの名前空間は関数や定数もスコープに含まれます。
namespace MyApp;
function strlen($str) { return 42; }
echo strlen("abc"); // 42(標準のstrlenは呼ばれない)
ハマりポイント3:オートロードとの関係
- Javaはクラスパスでクラスを探し、自動的にロード
- PHPはPSR-4準拠で
Composer
がディレクトリと名前空間をマッピングして読み込む - 名前空間とディレクトリ構造がズレているとオートロード失敗
イメージで理解する
- Javaのパッケージ:きっちり整列した住所(国・県・市)で必ずその場所に存在
- PHPの名前空間:住所はあるけど、実際の建物(ファイル)は別の場所に置いても動く(ただし混乱の元)
実務での推奨
- PSR-4に従い、名前空間=ディレクトリ構造にする
- グローバル名前空間を避け、必ず名前空間を宣言
- 標準クラスや関数と同名にしない
use
を使い、完全修飾名(\App\Foo\Bar
)の多用を避ける
次はラスト10つ目「実行環境の違い」です。
JavaとPHPの開発〜デプロイの流れの根本的な違いが整理できます。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
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「コンストラクタの書き方の違い」