目次
1. ネームスペースとは何ですか
2. 名前空間を使用する理由
3. 名前空間の宣言
4、导入和别名
5、实用技巧
ホームページ バックエンド開発 PHPチュートリアル 最新の PHP 新機能シリーズ (1) -- 名前空間

最新の PHP 新機能シリーズ (1) -- 名前空間

Jun 23, 2016 pm 01:06 PM

1. ネームスペースとは何ですか

最新の PHP 機能を 1 つだけ知っていればよいのであれば、それはネームスペースです。ネームスペースは PHP5.3.0 で導入されました。その機能は、オペレーティング システムのファイル システムのディレクトリ構造に似た仮想階層構造に従って PHP コードを編成することです。名前空間は、最新の PHP コンポーネント エコシステムの基盤です。最新の PHP コンポーネント フレームワークのコードは、他のメーカーが使用する一般的なクラス名との競合を避けるために、独自のグローバルに固有のメーカーの名前空間に配置されます。

実際の PHP コンポーネントが名前空間をどのように使用するかを見てみましょう。 Laravel フレームワークの Http コンポーネントは、HTTP リクエストとレスポンスを管理するために使用されます。このコンポーネントは、Request や Response などの共通のクラス名を使用します。他の PHP コードも同じクラス名を使用します。このコンポーネントの使い方は?実際、このコンポーネントのコードは唯一のメーカーの名前空間 Illuminate に配置されているため、安心して使用できます。 GitHub (https://github.com/laravel/framework/blob/master/src/Illuminate/Http/Response.php) でこのコンポーネントのリポジトリを開き、Response.php ファイルを見つけます:

Line 3 As

namespace Illuminate\Http;
ログイン後にコピー

この行は PHP 名前空間宣言ステートメントであり、名前空間を宣言するコードは常に

名前空間の役割は、関連するファイルをファイル システムの同じディレクトリに置くのと同じように、関連する PHP クラスをカプセル化して整理することです。 PHP 名前空間は、オペレーティング システムの物理ファイル システムとは異なり、仮想概念であり、ファイル システムのディレクトリ構造とまったく同じである必要はありません。ただし、ほとんどの PHP コンポーネントは、広く使用されているものと互換性があります。 PSR-4 オートロード標準。ネームスペースは、対応するファイル システムのサブディレクトリに配置されます。

2. 名前空間を使用する理由

前に述べたように、私たちのコードは他の開発者のコ​​ードと同じクラス名、インターフェイス名、関数、または定数名を使用する可能性があります。名前空間を使用しない場合、名前は競合します。が発生し、PHP 実行エラーが発生します。名前空間を使用してコードをメーカー固有の名前空間に配置することで、コードは他の開発者と同じクラス名、インターフェイス名、関数、または定数名を使用できます。

もちろん、依存関係が少数しかない小規模な個人プロジェクトを開発している場合は、クラス名の競合は問題にならないかもしれませんが、チームで作業し、多くのサードパーティの依存関係を使用する大規模なプロジェクトを開発する場合は、次のことを行う必要があります。名前の競合の問題は深刻です。プロジェクトが依存するグローバル名前空間に導入されたクラス、インターフェイス、関数、定数を制御できないため、名前空間が使用されます。

3. 名前空間の宣言

すべての PHP クラス、インターフェイス、関数、および定数は、

名前空間は、トップレベルのベンダー名を設定するためによく使用されます。たとえば、ベンダー名を LaravelAcademy に設定します。

<?phpnamespace LaravelAcademy;
ログイン後にコピー

この名前空間宣言ステートメントの後に宣言されたすべての PHP クラス、インターフェイス、関数、および定数は、LaravelAcademy 名前空間にあります。 Laravel Academy と何らかの関係があるのと同じです。アカデミーで使用されるコードを整理したい場合はどうすればよいでしょうか?答えは、サブ名前空間を使用することです。

サブ名前空間の宣言方法は前の例とまったく同じです。唯一の違いは、シンボルを使用して名前空間とサブ名前空間を区切る必要があることです。例:

<?phpnamespace LaravelAcademy\ModernPHP;
ログイン後にコピー

すべてのクラス、インターフェイス、この名前空間以降の関数と定数は LaravelAcademyModernPHP にあります。

同じ名前空間内のクラスを同じ PHP ファイル内で宣言する必要はありません。このとき、このファイルのコードは名前空間またはサブです。 -名前空間の一部。したがって、同じ名前空間に属する複数のクラスを異なるファイルに記述することができます。

注: メーカーの名前空間はトップレベルの名前空間であり、ブランドまたは組織を識別するために使用され、世界的に一意である必要があります。サブネームスペースは比較的重要ではありませんが、プロジェクトのコードを整理するために使用できます。

4、导入和别名

在命名空间出现之前,PHP开发者使用Zend风格的类名解决命名冲突问题,这是一种类的命名方案,因Zend框架而流行,这种命名方案在PHP类名中使用下划线的方式表示文件系统的目录分隔符。这种约定有两个作用:其一,确保类名是唯一的;其二,原生的自动加载器会把类名中的下划线替换成文件系统的目录分隔符,从而确定文件的路径。例如, Zend_Cloud_DocumentService_Adapter_WindowsAzure_Query 类对应的文件是 Zend/Cloud/DocumentService/Adapter/WindowsAzure/Query.php 。可以看出,这种命名有个缺点:类名特别长。

现代的PHP命名空间也有这个问题,例如上述 Response 类完整的全名是 Illuminate\Http\Response ,幸好,我们可以通过导入以及创建别名的方式来改变这一状况。

导入的意思是指,在每个PHP文件中告诉PHP想使用哪个命名空间、类、接口、函数和常量,导入后就不用使用全名了:

<?phpuse Illuminate\Http\Response;$response = new Response(‘Oops’, 400);$response->send();
ログイン後にコピー

我们通过 use 关键字告诉PHP,我们想使用 Illuminate\Http\Response 类,我们只需要输入一次完全限定的类名,随后实例化 Response 的时候,无需使用完整的类名。

如果觉得这样的类名还是长,可以创建别名。创建别名指的是告诉PHP我要使用简单的名称引用导入的类、接口、函数或常量:

<?phpuse Illuminate\Http\Response as Res;$res = new Res(‘Oops’, 400);$res->send();
ログイン後にコピー

从PHP 5.6开始还可以导入函数和常量,不过要调整use关键字的句法,如果要导入函数,需要使用 use func :

<?phpuse func Namespace\functionNamefunctionName();
ログイン後にコピー

如果想导入常量,可以使用 use constant :

<?phpuse constant Namespace\CONST_NAME;echo CONST_NAME;
ログイン後にコピー

当然也支持别名,创建方式和类一样。

5、实用技巧

多重导入

如果想要在PHP文件中导入多个类、接口、函数或常量,需要在PHP文件的顶部使用多个use语句,PHP支持用简短的语法把多个use语句写成一行:

<?phpuse Illuminate\Http\Request,Illuminate\Http\Response;
ログイン後にコピー

但是为了可读性,建议不要这么写,还是一行写一个use语句比较好:

<?phpuse Illuminate\Http\Request;use Illuminate\Http\Response;
ログイン後にコピー

一个文件使用多个命名空间

PHP允许在一个文件中定义多个命名空间:

<?phpnamespace Foo {    //声明类、接口、函数、常量}namespace Bar {    //声明类、接口、函数、常量}
ログイン後にコピー

但这么做不好,违背了“一个文件一个类”的良好实践,因此不建议这么做。

全局命名空间

如果引用的类、接口、函数和常量没有指定命名空间,PHP假定引用的类、接口、函数和常量在当前的命名空间中。如果要使用其他命名空间的类、接口、函数或常量,需要使用完全限定的PHP类名(命名空间+类名)。

有些代码在全局命名空间中,没有命名空间,比如原生的Exception类就是这样。在命名空间中引用全局的代码时,需要在类、接口、函数或常量前加 \ 符号:

<?phpnamespace My\App;class Foo {    public function doSomething() {        throw new \Exception();    }}
ログイン後にコピー

自动加载

命名空间还为PHP-FIG制定的PSR-4自动加载标准奠定了坚实的基础,大多数现代的PHP组件都使用了这种自动加载模式,使用依赖管理器Composer可以自动加载项目的依赖,后续我们还会详细介绍Composer和PHP-FIG,现在你只需要知道没有命名空间,就没有现代的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)

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

なぜPHPを使用するのですか?利点と利点が説明されました なぜPHPを使用するのですか?利点と利点が説明されました Apr 16, 2025 am 12:16 AM

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

PHPとフレームワーク:言語の近代化 PHPとフレームワーク:言語の近代化 Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発など PHPの影響:Web開発など Apr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

See all articles