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

cakePHPでのCSVダウンロード

cakePHPにてCSVのダウンロードなんぞを。 以前このエントリーでCSVダウンロードに関しては取り扱ったのですが、 ボタンを押す ファイルダイアログが開く パスを選ぶ 意図したデータを正常にダウン …

no image

ループ処理+switch

PHPでちょっと小ネタ foreachやwhileのようなループを抜けるときにcontinueを使うんですが、その中にswitchが入っていると、switchに対してのcontinueがきいてしまって …

no image

PHPのPDFライブラリに関して。

今月PHPでPDFを出力する要件があったんで色々見てきましたので、まとめを。 昨年もちょっとやりましたが、色々と面倒です。 fpdfはかなり古くダメダメっぽいですね。昨年はじめにPDFを使う要件があっ …

no image

Laravelのルーティングに関して

Laravelでのルーティングに関して。 惰性で使っていたんですが、これを機にしっかりと整理してみようかと。あくまで頻出パターンのみです。 ディフォルトだとroutes/web.phpが読み込まれます …

no image

cakePHPでのマイグレーション

開発を続けているとデータベースのカラムの構造が変更するってことはしょっちゅうですが、管理がいい加減だとメンバー間でテーブルの構造が変わっていたり、本番と開発で違ってくるなどのトラブルが続出します。 そ …