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をフルパスで呼び出して、最後のクラス名でアクセスすることが一般的なようです。

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

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

5分で理解するPHPのnamespaceとuseの使い方

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

【PHP超入門】名前空間(namespace・use)について

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

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

namespace と utf-8 の微妙な関係

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

-PHP

執筆者:


comment

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

関連記事

no image

FastCGIに関して

nginxについて学習してきましたが、今回はphp-fpmについてです。 Contents1 そもそもの構成2 CGIのメカニズム3 FastCGI4 nginxでの設定に関して4.1 fastcgi …

no image

cake3でのバッチスクリプト

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

no image

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

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

no image

携帯サイト取得手法

PHPでスクレイピングの仕事をよくやるんですが、携帯サイトを取得してほしいという要望があり、少し調査をすることに。 携帯サイトといってもドメイン以下のディレクトリで/で区切ってsample.domai …

no image

emptyの扱いに関して

PHPで空白や存在確認として便利なemptyですが、乱用すると意図しない動きをすることがあるケースが多々あります。 Contents1 emptyの挙動に関して2 数値の03 検索などの全判定と値のな …