ホームページ php教程 php手册 PHP 5.3 の重要な機能: 名前空間

PHP 5.3 の重要な機能: 名前空間

Jun 21, 2016 am 08:56 AM
module project user

PHP 5.3 の重要な新機能は名前空間です。
この機能は PHP5.0x で提案されましたが、後にキャンセルされ、PHP6 で実装される予定でした。今回も PHP 5.3 が「予定より前倒し」でリリースされましたが、これは開発者が PHP 5.3 を非常に重視しており、慎重であることを示しています。

公式リリースの内容は古い可能性があります (ドキュメントも古い可能性があります)。そこで、名前空間の使用法を簡単に説明します。まず、名前空間を宣言し、新しいキーワード名前空間を追加します。クラス ファイルの先頭

1
2
3
4
5
6
7
8
ログイン後にコピー
<span style="FONT-WEIGHT: bold; COLOR: #000000"><?php</span>    
namespace Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">;</span> 
<span style="FONT-WEIGHT: bold; COLOR: #000000">class</span> User <span style="COLOR: #009900">{</span>  <span style="FONT-WEIGHT: bold; COLOR: #000000">const</span> STATUS_OK <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">true</span><span style="COLOR: #339933">;</span> 
<span style="FONT-WEIGHT: bold; COLOR: #000000">function</span> register<span style="COLOR: #009900">(</span><span style="COLOR: #000088">$data</span><span style="COLOR: #009900">)</span> <span style="COLOR: #009900">{</span> 
<span style="COLOR: #339933">...</span>  <span style="COLOR: #009900">}</span> 
<span style="COLOR: #339933">...</span> 
<span style="COLOR: #009900">}</span>
<span style="FONT-WEIGHT: bold; COLOR: #000000">?></span>
ログイン後にコピー

その後、コントローラー (おそらく他のファイル) で次のように呼び出すことができます

1
2
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
<span style="COLOR: #000088">$user</span> <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">new</span> Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span>    
<span style="COLOR: #000088">$user</span><span style="COLOR: #339933">-></span><span style="COLOR: #004000">register</span><span style="COLOR: #009900">(</span><span style="COLOR: #000088">$register_info</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span>
ログイン後にコピー

確かにいつもと同じですが、2 つの独立したクラスを接続できます。たとえば

1
2
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #339933">;</span>    
Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">Blog</span><span style="COLOR: #339933">;</span>
ログイン後にコピー

これにより、変数とクラスの間の関係を言語自体から簡単に説明して理解できるようになり、Project_Module_Blog の「従来の」長い命名方法が回避されます。
上記の説明では、名前空間を使用する利点を説明するのが難しい場合があります。新しく追加された と をキーワードとして使用すると、問題がよりわかりやすく説明される可能性があります。および as ステートメントを使用すると、名前空間の「エイリアス」を参照および宣言できます。たとえば、上記のコントローラーでクラスをインスタンス化するコードは次のように記述できます

1
2
3
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
use Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">;</span>    
<span style="COLOR: #000088">$user</span> <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">new</span> Module<span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 
<span style="COLOR: #000088">$user</span><span style="COLOR: #339933">-></span><span style="COLOR: #004000">register</span><span style="COLOR: #009900">(</span><span style="COLOR: #000088">$register_info</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span>
ログイン後にコピー

偶数

1
2
3
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
use Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span> <span style="COLOR: #b1b100">as</span> ModuleUser<span style="COLOR: #339933">;</span>    
<span style="COLOR: #000088">$user</span> <span style="COLOR: #339933">=</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">new</span> ModuleUser<span style="COLOR: #339933">;</span> 
<span style="COLOR: #000088">$user</span><span style="COLOR: #339933">-></span><span style="COLOR: #004000">register</span><span style="COLOR: #009900">(</span><span style="COLOR: #000088">$register_info</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span>
ログイン後にコピー

クラス内の定数は、名前空間を通じてアクセスすることもできます。たとえば、上記のクラスの STATUS_OK は、名前空間を通じてアクセスできます。

1
ログイン後にコピー
ログイン後にコピー
Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">STATUS_OK</span>
ログイン後にコピー

訪問。さらに、エイリアスを使用して、このような長い「変数名」を簡素化することもできます

1
2
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
use Project<span style="COLOR: #339933">::</span><span style="COLOR: #004000">Module</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">User</span><span style="COLOR: #339933">::</span><span style="COLOR: #004000">STATUS_OK</span> as STATUS_OK;    
echo STATUS_OK;
ログイン後にコピー

ところで、「ハイパースペース(グローバル名前空間)」の概念について触れておきましょう。いわゆる「ハイパースペース」とは、指定された名前空間を持たない変数、クラス、関数を指します。たとえば

1
2
3
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
<span style="FONT-WEIGHT: bold; COLOR: #000000">function</span> foo<span style="COLOR: #009900">(</span><span style="COLOR: #009900">)</span> <span style="COLOR: #009900">{</span>    
<span style="COLOR: #339933">...</span> 
<span style="COLOR: #009900">}</span>
ログイン後にコピー

这的函数,可以使用 foo() 执行的同时,也可以使用 ::foo(); 这样执行。

最后,配合使用 autoload 函数即可载入指定命名空间的类。简单的函数如下

1
2
3
4
5
ログイン後にコピー
<span style="FONT-WEIGHT: bold; COLOR: #000000">function</span> __autoload<span style="COLOR: #009900">(</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #009900">)</span> <span style="COLOR: #009900">{</span>    
<span style="COLOR: #000088">$classname</span> <span style="COLOR: #339933">=</span> <span style="COLOR: #990000">strtolower</span><span style="COLOR: #009900">(</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 
<span style="COLOR: #000088">$classname</span> <span style="COLOR: #339933">=</span> <span style="COLOR: #990000">str_replace</span><span style="COLOR: #009900">(</span> <span style="COLOR: #0000ff">'::'</span><span style="COLOR: #339933">,</span> DIRECTORY_SEPARATOR<span style="COLOR: #339933">,</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 
<span style="COLOR: #b1b100">require_once</span><span style="COLOR: #009900">(</span> <span style="COLOR: #990000">dirname</span><span style="COLOR: #009900">(</span> <span style="FONT-WEIGHT: bold; COLOR: #000000">__FILE__</span> <span style="COLOR: #009900">)</span> <span style="COLOR: #339933">.</span> <span style="COLOR: #0000ff">'/'</span> <span style="COLOR: #339933">.</span> <span style="COLOR: #000088">$classname</span> <span style="COLOR: #339933">.</span> <span style="COLOR: #0000ff">'.class.php'</span> <span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span> 
<span style="COLOR: #009900">}</span>
ログイン後にコピー

这样,比如调用

1
ログイン後にコピー
ログイン後にコピー
__autoload<span style="COLOR: #009900">(</span><span style="COLOR: #0000ff">'Project::Module::User'</span><span style="COLOR: #009900">)</span><span style="COLOR: #339933">;</span>
ログイン後にコピー

就可以自动载入 Project_Module_User.class.php 文件(虽然这样看起来并不方便多少)。



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ModuleNotFoundError: Python モジュールが見つからないエラーを解決するには? ModuleNotFoundError: Python モジュールが見つからないエラーを解決するには? Jun 25, 2023 pm 09:30 PM

Python の開発プロセスでは、モジュールが見つからないというエラーがよく発生します。このエラーの具体的な症状は、モジュールのインポート時に Python が ModuleNotFoundError または ImportError の 2 つのエラーのいずれかを報告することです。このエラーは非常に厄介で、プログラムが適切に実行されなくなる可能性があるため、この記事では、このエラーの原因とその解決方法を検討します。 Pyth の ModuleNotFoundError と ImportError

Java9の新機能モジュール モジュラープログラミング方式 Java9の新機能モジュール モジュラープログラミング方式 May 19, 2023 pm 01:51 PM

Java9 バージョンでは、Java 言語にモジュールという非常に重要な概念が導入されました。 JavaScript コードのモジュール管理に慣れている場合は、Java 9 のモジュール管理を見ると親しみを感じるはずです。 1. Javaモジュールとは何ですか? Java のパッケージと似ている部分ですが、モジュールは Java コードの別のレベルのグループ化を導入します。このような各グループ (モジュール) には、多くのサブパッケージが含まれています。ファイル module-info.java をモジュールのソース コード ファイル パッケージのルートに追加することにより、フォルダーとそのサブフォルダーをモジュールとして宣言します。ファイルの構文

Docker マウントディレクトリの権限の問題を解決する方法 Docker マウントディレクトリの権限の問題を解決する方法 Feb 29, 2024 am 10:04 AM

Docker では、マウント ディレクトリの権限の問題は通常、-v パラメータを使用してマウント ディレクトリを指定するときに権限関連のオプションを追加することで解決できます。マウントされたディレクトリのアクセス許可を指定するには、マウントされたディレクトリの後に ro または :rw を追加します。それぞれ、読み取り専用と読み取り/書き込みアクセス許可を示します。例: dockerrun-v/host/path:/container/path:roimage_name Dockerfile で USER ディレクティブを定義してコンテナ内で実行するユーザーを指定し、コンテナ内での操作が権限要件に準拠していることを確認します。例: FROMimage_name#CreateanewuserRUNuseradd-ms/bin/

LinuxシステムでNTFSディスクをマウントするときに「モジュールヒューズが見つかりません」という問題を解決するにはどうすればよいですか? LinuxシステムでNTFSディスクをマウントするときに「モジュールヒューズが見つかりません」という問題を解決するにはどうすればよいですか? Dec 31, 2023 pm 03:17 PM

1. まず、Linux システム カーネル [root@localhost~]#uname-r-p2.6.18-194.el5i6862 を確認し、http://sourceforge.net/projects/linux-ntfs/files/ に移動して rpm パッケージをダウンロードします。まったく同じカーネルが見つからない場合は、最も近いカーネルを見つけることができます。まったく同じものは見つかりませんでした。ダウンロードしたものは次のとおりです: kernel-module-ntfs-2.6.18-128.1.1.el5-2.1.27-0.rr.10.11.i686.rpm3. rpm パッケージ rpm をインストールします-ivhkernel -m

Vuex モジュール - ステート ウェアハウス パーティショニングの使用の概要 Vuex モジュール - ステート ウェアハウス パーティショニングの使用の概要 Aug 10, 2022 pm 04:01 PM

Vuex は主に、State、Getter、Mutation、Action、Module の 5 つの部分で構成されています。以下では、Vuex モジュールと状態ウェアハウスのセグメンテーションを紹介します。

PythonのOSモジュールの使い方とサンプル PythonのOSモジュールの使い方とサンプル Apr 22, 2023 pm 10:19 PM

Python の os モジュールは、オペレーティング システムとの対話に使用される標準ライブラリの 1 つで、ファイルやディレクトリを操作するための便利な関数や変数が多数提供されています。一般的な OS モジュール関数の使用法を次に示します。 1. 現在の作業ディレクトリを取得します: importoscwd=os.getcwd()print(cwd) 2. 現在の作業ディレクトリを切り替えます: importosos.chdir('/path/to/new /directory' )3. ディレクトリ内のすべてのファイルとサブディレクトリをリストします: importosfiles=os.listdir('/path/to/dire

1986 年の Apple IIGS キーボード、DIY プロジェクトでワイヤレス接続と OLED ディスプレイを取得 1986 年の Apple IIGS キーボード、DIY プロジェクトでワイヤレス接続と OLED ディスプレイを取得 Sep 28, 2024 am 06:07 AM

最近はレトロなメカニカル キーボードが大流行しており、IBM モデル M などは、技術的には機械式ではありませんが、近年では電子廃棄物から真のマニア向けのキーボードになりました。ただし、魅力的なキーボードはModel Mだけではありません

Modderは、完璧なリバースエンジニアリングと最新の機能を使用して、1986 Apple IIGSキーボードをワイヤレスに変換します Modderは、完璧なリバースエンジニアリングと最新の機能を使用して、1986 Apple IIGSキーボードをワイヤレスに変換します Sep 27, 2024 pm 03:02 PM

最近はレトロなメカニカル キーボードが大流行しており、IBM モデル M などは、技術的には機械式ではありませんが、近年では電子廃棄物から真のマニア向けのキーボードになりました。ただし、魅力的なキーボードはModel Mだけではありません

See all articles