PHP名前空間(Namespace)シンプルチュートリアル


この特性はPHP 5.0 xの時に提出されましたが、その後キャンセルされ、PHP 6に実装されます。今回もPHP 5.3の発表を「前倒し」しており、開発者の重視と慎重さがうかがえる。
文書の内容が有効期限が切れていることを公式に説明しますので、ここでは名前空間の使い方を簡単に説明します。まず名前空間を宣言して、新しいキーワードを追加しました。このように

<?php  
namespace Project::Module;   
class User {      
    const STATUS_OK = true;      
    function register($data) {  
        ...      
    }  
    ...  
}?>
を呼び出すことができるのは、クラスファイルの先頭

$user = new Project::Module::User();  
$user->register($register_info);
であるべきですが、2つの相互に独立したクラスを関連付けることができます。たとえば

Project::Module::User;  
Project::Module::Blog;
これにより、言語自体から変数、クラス間の関係を記述しやすく理解することができ、「伝統」上のProject(u)を回避することができます。Module_Blogのような長い命名方法。
上の説明は名前空間を使って何のメリットがあるか説明しにくいかもしれません。新たに増加したuseとasキーワードはもっといい説明ができるかもしれません。useとas文は名前空間の別名を引用して宣言することができます。例えば、上記のコントローラに実装されているクラスのコードはこのように書くことができます。

use Project::Module;  
$user = new Module::User();   
$user->register($register_info);
  までも

use Project::Module::User as ModuleUser;  
$user = new ModuleUser;  
$user->register($register_info);
クラスの常数も名前空間を通してアクセスできます。例えば上記の種類のSTATUS_。OKは名前空間を通過することができます。

Project::Module::User::STATUS_OK
アクセス。さらに、別名であれば長い「変数名」を簡略化しても良いです。

use Project::Module::User::STATUS_OK as STATUS_OK;
echo STATUS_OK;
ついでに「超空間(The Global Namespace)」という概念を紹介します。「超空間」とは、名前空間を指定しない変数、クラス、関数です。たとえば

function foo() {  
    ...  
}
の関数は、foo()を使用して実行することができます。このように実行します。
最後に、autload関数を使うと、指定された名前空間のクラスをロードできます。簡単な関数は以下の通りです。

function __autoload( $classname ) {      
    $classname = strtolower( $classname );      
    $classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );  
    require_once( dirname( __FILE__ ) . '/' . $classname . '.class.php' );  
}
、呼び出しのようなものです。

__autoload('Project::Module::User'); 
は自動的にプロジェクトにロードできます。Module_User.class.phpファイルです。