A4 WORKS Official BLOG

A4 WORKS オフィシャルブログ

PHP

PHPの名前空間を実際に使ってみた。

投稿日:2015年2月20日 更新日:

A4 WORKS 新人の池田です。
“ブログを書くことで学べる事も多くある”という教えのもと、ブログ初挑戦です。
読みにくい部分も多分にあるかとは思いますが最後までおつきあい頂けますと幸甚です。


今回はPHPのバージョン5.3から新しく使えるようになった名前空間を練習の意味も含め実際に使ってみようと思います。

名前空間って何???

まず、名前空間とはなんなのか、という言う事で簡単に説明させていただきます。
名前空間はフォルダとにたような概念で、名前が同じでも別々の名前空間に定義してあれば別々のものと扱われ同じ名前の衝突を避けることができます。
名前空間がないパージョン5.3以前では、アンダーバーで区切ってroot_sub_name1_class1などと長い名前を付ける事により同じ名前の衝突を避けていたようです。

名前空間を使う時意識する事3つ

次に、実際に名前空間を使うにあたっての意識する点を軽く確認したいと思います。
1.名前空間はクラス、関数、定数に影響する。
2.ある名前からどの名前空間の名前かを決定していく順番(名前解決)は、useによるインポート、現在の名前空間、グローバル空間となる。
3.同じファイルに複数の名前空間を定義する場合、次の定義の部分にいったら名前空間が切り替わる。 h3:見落としがちな点 ディレクトリは/(スラッシュ)で区切るが、名前空間は\(バックスラッシュ)で区切る

名前空間を実際に使ってみる

実際に簡単にコードを書いて検証をおこなってみます。

difin.php

//まず現在の名前空間foo\bar\name1を定義します。
namespace foo\bar\name1;
class class1 {
public function class_func(){
echo 'class1';
}
}
const cons1 = 'cons1';
function func1(){
echo 'func1';
}
//ここから名前空間はfoo\bar\name2に切り替わる。
namespace foo\bar\name2;
function func1(){
echo 'func2';
}
//ここから名前空間はfoo\name3に切り替わる。
namespace foo\name3;
function func1(){
echo 'func3';
}

 output.php

namespace foo;//現在の名前空間の定義
require_once 'define.php';//使うファイルをインポート
use foo\bar;//名前空間のインポート
//エイリアスを使うuse foo\bar as bar;と同じ。
$obj1 = new bar\name1\class1; //インポートに基づきクラスfoo\bar\name1\class1となる。
$obj1->class_func();
//class1と表示されます。
echo bar\name1\cons1;//インポートに基づき定数foo\bar\name1\cons1となる。
//cons1と表示されます。
bar\name1\func1();//インポートに基づき関数foo\bar\name1\func1();となる。
//func1と表示されます。
bar\name2\func1();//インポートに基づき関数foo\bar\name2\func1();となる。
//func2と表示されます。
name3\func1();//インポートに基づくとfoo\bar\name3\func1()となるが見つからないので、
//現在の名前空間fooから探し関数foo\name3\func1();となる。
//func3と表示されます。

実際、名前空間が使われている一例として、直近のプロジェクトで導入されているZend Framework2フレームワーク内ではオートロードと一緒に使うことによりファイルのインポート文を書くことなく名前空間のインポート文だけで済むようになっています。
名前空間が採用された事で、これからphpのフレームワークを使う方はもっと恩恵を受けられると感じました。


 
最後までお付き合い頂き有難うございました!
まだまだ未熟ではありますが、ブログを書くこと通して皆様のお役に立てます様に精進してまいります!

-PHP

執筆者:

関連記事

FuelPHPを使ってみる

ゲーム開発プロジェクトのサーバー側(アプリと連携させるAPIとか管理機能とか)をどうするか検討していたんですがFuelPHPが良さそうなので、導入してみました。 http://fuelphp.jp/ …

memcachedのインストールとPHPの対応

AWSのサーバーにmemcachedをインストールしたので備忘録。 memcachedのインストール # yum install memcached 起動します。 # service memcache …

Google Developers PageSpeed Insightsを活用してパフォーマンスチューニング

PageSpeed Insightsのトップページに書いてあるんですが「あらゆる端末でウェブページの読み込み時間を短くしましょう。」との事。 読み込みが早い方が良いのはもちろんその通りで、問題はどうや …

FuelPHPをPHP7.2に対応させる

php oil g model {以下省略} をすると下記のエラーがでました。 Uncaught exception Fuel\Core\PhpErrorException: 2 – Il …

PHPでAPCを有効にするとclass not foundになる現象

最近はLINEスタンプのネタばかりだったので、久々の技術ネタです。 4年ほど前に作ったシステム(ソーシャルゲーム)を訳あってAWS環境で再構築したところ、APCを有効にするとそれまで普通に動いていたシ …