PHPのnamespace(名前空間)の使い方を現役エンジニアが解説【初心者向け】

初心者向けにPHPのnamespace(名前空間)の使い方について現役エンジニアが解説しています。namespace(名前空間)とは、クラスや関数などに名前の空間を作り出すことです。同じ名前のクラスや関数を使用可能にします。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事が4,000以上あります。現役エンジニアの方はこちらをご覧ください。

今回は、PHPのnamespace(名前空間)の使い方について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

 

PHPについてそもそもよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まるでしょう。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPのnamespace(名前空間)の使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

namespace(名前空間)とは

namespace(名前空間)とは、クラスや関数、インターフェースや定数を1つのまとまりとして作り出す機能のことです。

通常、同じファイルに同名のクラスや関数を定義することはできないものの、別々の名前空間にそれらを定義することによって、名前の衝突を防ぐことが可能です。

名前空間はPHP5.3.0で導入されました。

 

namespace(名前空間)の使い方

namespace(名前空間)の定義の仕方は、namespaceキーワードの後に任意の空間名を記述します。

namespace 名前空間名;

namespaceは一番最初に記述してください。

namespaceの前にphpの命令文やHTMLなどを記述するとエラーが表示されます。

唯一許されているのは、declare(ディクレア)文のみです。

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

namespaceを使った例をソースコードで見ていきましょう。

まずは、同一ファイルに同じ名前の関数を定義して、実際に呼び出した時にどのようなエラーになるか見ていきます。

apple.php

<?php
function getName(){
return 'Apple';
}

lemon.php

<?php
function getName(){
return 'Lemon';
}

fruits.php

<?php
require_once 'apple.php';
require_once 'lemon.php';
echo getName();

fruits.phpの実行結果は以下の通りです。

実行結果(エラー)

Fatal error: Cannot redeclare getName() (previously declared in...

このエラーは、同一空間にgetName()関数を2つ定義していることによって起きるエラーです。

同じ名前の関数を再定義することはできないとエラーで指摘されます。

 

次に、実際にnamespaceを使用した例を見ていきましょう。

apple.php

<?php
namespace red;
function getName(){
return 'Apple';
}

lemon.php

<?php
namespace yello;
function getName(){
return 'Lemon';
}

上記の例では、apple.phpのgetName()関数は、「red」という名前空間の中にlemon.phpのgetName()関数は、「yello」という名前空間の中に存在している状態になっています。

fruits.php

<?php
require_once 'apple.php';
require_once 'lemon.php';
echo red\getName();

実行する際は、「名前空間名\関数名」のように表記し実行しましょう。

上記の実行例では、「Apple」が出力されるものの、yello\getName()を出力すると「Lemon」が出力されます。

 

執筆してくれたメンター

平野大輝(ひらのだいき)

スキル:PHP・Java・JavaScriptを用いて様々なアプリを開発するWebエンジニア。

 

大石ゆかり

PHPのnamespace(名前空間)の使い方がよく分かったので、良かったです!

田島悠介

ゆかりちゃん、これからも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも最短4週間で、PHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、参加してみてください。