icon
icon

PHPのキーワードnamespaceについて現役エンジニアが解説【初心者向け】

初心者向けにPHPのキーワードnamespaceについて現役エンジニアが解説しています。namespaceとは名前空間のことで、別名のフォルダやファイル名を付けるような形で、関数名やクラス名の衝突を防ぐことが出来ます。PHPのnamespaceキーワードの書き方や使い方について解説します。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

 

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

 

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

 

田島悠介

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

大石ゆかり

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

田島悠介

PHPのキーワードnamespaceについて詳しく説明していくね!

大石ゆかり

お願いします!

 

名前空間とは

名前空間とは項目(クラスや関数など)をカプセル化(グループ化)することをいいます。

PCにファイルを保存する時、同じフォルダに同じファイル名で保存することはできませんよね?

それは、同じ名前空間に同じ名前のファイルを保存すると名前の衝突が起きるからです。そのどちらかのファイルを開く時に、コンピューターはどちらのファイルを開けばいいのか判断ができないためです。

しかし、フォルダAとフォルダBを作成すれば、それぞれに同じファイル名のファイルを保存することが可能です。(A/file.txt、B/file.txt)

これは、Aという名前空間とBという名前空間が別であるために、「Aというフォルダに保存してあるfile.txt」と、「Bというフォルダに保存してあるfile.txt」は別物であるとコンピューターは判断できるためです。

日常生活で言えば、名前に対して苗字をつける感覚に似ています。2人の太郎くんが同じ学校のクラスにいたとして、「太郎くん」と呼ばれただけでは、どちらの太郎くんが呼ばれたのか分からないですよね。でも、「田中太郎くん」と「鈴木太郎くん」と呼ばれれば、どちらが呼ばれたか判断できますよね。

PHPの名前空間もPCの名前空間の延長線上にあり、そういった名前の衝突を防ぐために使用されます。
 

namespaceキーワードの使い方

PHPでは、同じファイルに同一名のクラス、インターフェイス、関数、定数を定義できません。

しかし、PHPのnamespaceキーワードを使用するこで、上記の項目に名前空間を提供し、同じファイルであっても定義すること可能になります。

それでは、namespaceキーワードの使い方について見てみましょう。
 

namespaceの書き方

namespace 名前空間名;

クラスや関数などの前に、「namespace 名前空間名;」を記述することで、それ以降に記載するクラスや関数などの項目に名前空間名で記載した名前空間を提供することができます。
 

サンプルコード

<?php
namespace tanaka;
class Taro {
    public function getName() {
        return '田中太郎';
    }
}
namespace suzuki;
class Taro {
    public function getName() {
        return '鈴木太郎';
    }
}
?>

上記のサンプルコードでは、一つ目のクラスTaroが名前空間tanakaに属していて、二つ目のクラスTaroが名前空間suzukiに属しています。
 

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

実際に書いてみよう

それでは、実際にnamespaceキーワードで名前空間を作成し、使用する例を見てその効果を確認しましょう。
 

名前空間を使用しない場合

まずは、名前空間を使用せずに同一ファイル内でクラスを定義した場合の例を見てみましょう。

person1.php:

<?php
    class Taro {
        public function getName() {
            return'田中太郎';
        }
    }
?>

person2.php:

<?php
    class Taro {
        public function getName() {
            return'鈴木太郎';
        }
    }
?>

call.php:

<?php
require_once 'person1.php';
require_once 'person2.php';

 

call.php実行結果

PHP Fatal error:  Cannot declare class Taro, because the name is already in use in person2.php on line 2

上記では、call.phpに2つのファイルperson1.phpとperson2.phpを取り込み実行しています。

2つのファイルを取り込むことで、各々のファイル内に定義してあるクラスTaroがcall.php内で2つ定義されたことになり、「既にクラスTaroは定義済みなので、定義できない」というエラーが出力されます。
 

名前空間を使用する場合

次にnamespaceキーワードを使用して、名前空間を作成した時の例です。

person1.php:

<?php
namespace tanaka;
class Taro {
    public function getName() {
        return '田中太郎';
    }

}
?>

person2.php:

<?php
namespace suzuki;
class Taro {

    public function getName() {
        return '鈴木太郎';
    }
}
?>

call.php:

<?php
require_once 'person1.php';
require_once 'person2.php';
$person1 = new tanakaTaro();
$person2 = new suzukiTaro();
echo '私の名前は、'.$person1->getName().'です'."n";
echo '私の名前は、'.$person2->getName().'です'."n";
?>

 

実行結果

私の名前は、田中太郎です
私の名前は、鈴木太郎です

上記のサンプルコードでは、namespaceキーワードを使用することで各々のクラスTaroに名前空間が作成されています。

call.phpに呼び出された時には、tanakaTaroとsuzukiTaroという形で定義されていることになるので、同一のクラス名であっても別々のものとして定義されているこになります。

上記の通り、namespaceキーワードを使用した場合は、「名前空間名クラス名」というバックスラッシュで区切る形でインスタンスを生成します。

もし名前空間を使用した関数を呼び出す時は、「名前空間名関数名」という形で呼び出します。
 

まとめ

以上、PHPのnamespaceキーワードを使用して名前空間を作成する方法を紹介しました。

名前空間を使用することで、クラス名と関数名に同一の名前にすることができるので読みにくい名前をつけずに済みます。

また名前空間によってグルーピングされることによって、その機能が何に使われるのか分かりやすくなる効果もあります。

namespaceキーワードによる名前空間の作成方法を覚えて、よりよいコーディングができるようになりましょう。
 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

筆者プロフィール

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

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

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

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

大石ゆかり

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

 

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

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する