skillup

技術ブログ

PHP

PHPの名前空間

投稿日:2015年11月24日 更新日:

PHPでも5.3以降はJavaのパッケージのように名前空間を使うことができます。

いままではライブラリやアプリケーションの開発者は、PHPに組み込まれている関数やクラス名や他の人が作ったライブラリとの名前衝突を防ぐためにプレフィックスなどをつけるようにしていました。

例 Net_UserAgent_Mobile

名前空間を使うことで名前の衝突を防ぐことができ、長々しい関数名やクラス名をつけることがなくなります。

namespace 名前空間\サブ名前空間

クラス、関数、定数に関して影響があり、それぞれ名前空間を利用したフルパスでアクセスが可能

下記サンプルを参考にしてみてください。

ディレクトリ構成は下記のとおりです。

com/sample/Hoge.php

com/sample/Foo.php

com/practice/Bar.php

注意点としては冒頭の\があるかないかです。

小さいところなんですが、これが あれば絶対パス。ないと相対パスと判断します。慣れてないと見抜きにくいので要注意です。

同一の名前空間上にあるかそうでないかを判断するうえで大切です。

これがあるとないとでパスの指定方法が変わってきて動かない・・ということが結構あるので要注意です。

useの使い方

useを使うことでフルパスでなく、任意の名称を付けることができます。

com/sample/Hoge.php

com/sample/Foo.php

com/practice/Bar.php

一般的には下記のようにasを使わずにuseをフルパスで呼び出して、最後のクラス名でアクセスすることが一般的なようです。

追記:ひさびさに自分のものを読んだんですが、わかりにくい。

下記リンクのほうがはるかによくまとまっててわかりやすいですね・・・

https://remotestance.com/blog/3064/

さらに網羅してある情報が完璧なのはこちらです。

http://qiita.com/7968/items/1e5c61128fa495358c1f#use-%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

※useは対象のクラスに名前空間を付ける処理ですがrequireではないので合わせてrequireをするようにしましょう。一般的にはautoloaderを使う方法がメジャーです。autoloaderについてはこちら

またutf-8のBOMがついているとエラーになることがあるので、BOMなしにしておきましょう。

namespace と utf-8 の微妙な関係

文字コードのUTF-8について、BOM無しと、BOM付き、というのがあったのですが、具体的に、どう異なるのでしょうか?

-PHP

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

jenkinsでのPHPのCIに関して

PHPでのjenkinsに関して。 PHPでのjenkinsといっても基本Javaなどと変わらないと思います。 何らかのトリガーでjenkinsのjobをビルド(一連のタスク)させる ビルドの内容はソ …

no image

CakePHP3 日付ライブラリ(Time)について

CakePHPには標準でいろいろなライブラリが入っていますが、日付ではCake\I18n\Timeというライブラリが入っています。 内部では3.2より前のバージョンではCarbonだったようですが、そ …

no image

phing

今までphpunit,phpmd,phpcodesniffer,phpdocumentなどのツールをいろいろと試してきますが、個別に動かしていると大変面倒ですので、これを一気に行えるライブラリがありま …

no image

form以外でのPOST送信

前回の記事に引き続きですが、APIを叩く側はformでデータを送るのではなく、コードの中にPOSTする処理を書きます。 選択肢としては curlコマンドを使う file_get_contentsを使う …

no image

cake3でのバッチスクリプト

以前、cakeでのバッチをこちらのエントリーで書きましたが、今回は3系でのバッチの書き方について。 といってもほとんど同じですが・・・ Contents1 ディレクトリ2 ソース ディレクトリ src …