目次
PHPの名前空間の詳細な紹介
ホームページ バックエンド開発 PHPチュートリアル PHP_PHP チュートリアルの名前空間の詳細な紹介

PHP_PHP チュートリアルの名前空間の詳細な紹介

Jul 13, 2016 am 09:47 AM
php 主要 導入 名前 記事 空間 詳しい

PHPの名前空間の詳細な紹介

この記事では、主にPHPの名前空間の詳細な紹介を紹介します。この記事では、名前空間(ネームスペース)の概念、名前空間の使用、名前空間、サブ名前空間の定義、コードの呼び出しなどについて説明します。名前空間、必要な友達がそれを参照できます

概要

PHP の名前空間サポートは困難な道のりを経てきました。幸いなことに、PHP は 5.3 から名前空間を導入しました。 PHP に名前空間が導入されて以来、適用可能な PHP コードの構造も大幅に改善されました。多くのプログラミング言語には以前から名前空間の概念がありましたが、他の言語に比べて、PHP の名前空間のサポートは少し遅れています。いずれにしても、すべての新機能の導入には目的があります。他の言語と同様に、PHP は主に名前の競合の問題を解決するために名前空間を導入します。

名前空間の概念

コードは以下の通りです:

文字列内で名前空間名を使用する場合は、必ずエスケープしてください

ネームスペースは引き出しと考えることができます。引き出しには鉛筆、定規、A4用紙などを入れることができます。これらは自分のプライベートアイテムです。あなたの引き出しの下には他の人の引き出しがあり、他の人がその引き出しに同じアイテムを入れることができます。アイテムを間違えないように、引き出しにラベルを貼って、アイテムの所有者が明確にわかるようにすることにしました。

以前は、開発者はコードをコードベースから独立させるために、クラス、関数、定数にアンダースコアを追加する必要がありました。これは、全員が自分の持ち物にラベルを付けて、大きな引き出しにしまうのと同じです。これはコードを整理する方法ですが、非常に非効率的です。

名前空間の登場はこの問題を解決するものです。名前の競合を引き起こすことなく、異なる名前空間で同じ関数、クラス、定数を宣言できます。本質的に、ネームスペースは PHP コードを階層的にマークする方法にすぎません。

ネームスペースの使用

注意すべき点の 1 つは、名前空間を間接的に使用していることです。 PHP 5.3 以降、ユーザー定義以外の名前空間内のすべての宣言 (クラス、関数、定数) は、デフォルトでグローバル名前空間に属します。

グローバル名前空間には、echo()、mysqli_connect()、Exception クラスなどのすべての PHP 内部定義が含まれます。グローバル名前空間には独立した識別子がないため、グローバル空間と呼ばれることがよくあります。

名前空間を定義する

名前空間の定義は、PHP ファイルの最初のステートメントでなければなりません。名前空間を定義する前に許可される唯一のステートメントは、declare ステートメントです。

名前空間の定義は非常に簡単で、キーワード namespace を使用するだけです。ネームスペースの名前は、PHP ファイル内の他の識別子の命名規則に従う必要があります。

以下は名前空間を定義する例です:

コードは以下の通りです:

名前空間 MyNamespace{

クラステスト{

}

}

グローバル空間に属するコード ブロックを定義する場合は、次のように namespace キーワードも使用しますが、その後に名前空間の名前を追加しないでください。

コードは次のとおりです:

名前空間 {

クラステスト{

}

}

次のように、1 つのファイルで複数の名前空間を定義することもできます。

コードは以下の通りです:

名前空間 MyNamespace {

}

名前空間 MySecondNamespace {

}

名前空間 {

}

名前空間を異なるファイルに分散させることもでき、ファイルに含まれるハンドラーがそれらを自動的にマージします。したがって、通常はクラスごとに個別のファイルを定義するのと同じように、同じファイル内で定義される多数の名前空間を制限することをお勧めします。

コードをコピーします。コードは次のとおりです:

注意すべき点の 1 つは、名前空間コード ブロックを含む { はオプションであり、使用してもしなくてもよいことです。実際、ファイル内で名前空間を 1 つだけ定義することに固執する限り、{ を完全に省略できます。これにより、コードをより簡潔に見せることもできます。

サブネームスペース

名前空間は、コンピューターのファイル システムのディレクトリと同じように、特定の階層に従うことができます。サブネームスペースは、プロジェクトを構築する場合に特に役立ちます。たとえば、プロジェクトがデータベースにアクセスする必要がある場合、すべてのデータベース関連コード (データベース例外処理など) を同じサブディレクトリに配置することができます。

柔軟性を維持するには、サブディレクトリにサブネームスペースを配置することが非常に賢明です。これにより、コード構造がより明確になり、PSR-0 標準に準拠したオートローダーを使用しやすくなります。

PHP は名前空間区切り文字としてバックスラッシュを使用します 興味深いことに、PHP は名前空間区切り文字としてスマイリーフェイス :) を使用することも検討していました。

サブ名前空間定義の例:

コードは次のとおりです:

名前空間 MyProjectDatabase

クラス接続 {

}

サブ名前空間は好きなだけ使用できます:

コードは以下の通りです:

名前空間 MyProjectBlogAuthHandlerSocial;

クラスツイッター{

}

注意すべき点の 1 つは、PHP は名前空間のネストされた定義をサポートしていないということです。次のコードは致命的なエラーを引き起こします: 名前空間宣言はネストできません。

コードは以下の通りです:

名前空間 MyProject {

名前空間データベース {

クラス接続 { }

}

}

名前空間からコードを呼び出す

クラスをインスタンス化する場合、関数を呼び出す場合、または別の名前空間の定数を使用する場合は、バックスラッシュを使用する必要があります。それらは 3 つの観点から分析できます:

1.名前無制限

2.限定名称

3. 完全修飾名

Unqualified Name(無修飾名)

これはクラス、関数、または定数の名前ですが、名前付き参照は含まれません。名前空間に慣れていない場合は、これがよく知られた角度です。

コードは以下の通りです:

名前空間 MyProject;

クラス MyClass {

静的関数 static_method()

{

エコー「Hello, world!」;

}

}

// 修飾されていない名前。現在いる名前空間 (MyProjectMyClass) に解決されます

MyClass:static_method();

修飾名

これがサブネームスペースの使い方です。例は次のとおりです:

コードは次のとおりです:

名前空間 MyProject;

「myproject/database/connection.php」が必要です;

// 修飾名。MyProject のサブ名前空間からクラスをインスタンス化します

$connection = new DatabaseConnection();

完全修飾名

上記の修飾名と非修飾名の使用はすべて、現在の名前空間を基準としています。上記の 2 つのメソッドは、現在の名前空間とさらに深いサブ名前空間にアクセスする場合にのみ使用できます。

前の名前空間よりも高いレベルの名前空間にアクセスする場合は、完全修飾名 (相対パスではなく絶対パス) を使用する必要があります。これは、要約すると、名前空間の先頭にバックスラッシュを追加することになります。完全修飾名を使用すると、呼び出しが現在の名前空間に関連するものではなく、グローバル空間から行われていることを PHP に認識させます。例は次のとおりです:

コードは次のとおりです:

名前空間 MyProjectDatabase;

「myproject/fileaccess/input.php」が必要です;

// MyProjectFileAccessInput クラスにアクセスしようとしています

// 今回は完全修飾名を使用しているため機能しますが、先頭のバックスラッシュに注意してください

$input = new MyProjectFileAccessInput();

PHPの内部関数には完全修飾名を使用する必要はありません。現在の名前空間に存在しない非修飾名でクラスまたは関数を呼び出すと、PHP はグローバル空間を検索します。

このルールを念頭に置いて、PHP の内部関数を次のように書き直すことができます:

コードは以下の通りです:

名前空間 MyProject;

var_dump($query); // オーバーロードされました

var_dump($query); // 内部

// グローバルExceptionクラスにアクセスしたい

// MyProjectDatabase 名前空間には Exception というクラスがなく、修飾されていないクラス名にはグローバル空間へのフォールバックがないため、以下は機能しません

// throw new Exception('Query failed!');

// 代わりに、単一のバックスラッシュを使用して、グローバル空間から解決したいことを示します

新しい例外をスローします('ailed!');

関数 var_dump() {

echo 'オーバーロードされたグローバル var_dump()!
';

}

ダイナミックコール

PHPは動的言語であり、PHPのこの機能は名前空間の呼び出しにも使用できます。これは、変数クラスをインスタンス化し、変数ファイルをインクルードすることと本質的に同じです。文字列では、PHP で使用される名前空間区切り文字 () もメタキャラクターであるため、エスケープする必要があります。

コードは以下の通りです:

名前空間OtherProject;

$project_name = 'MyProject';

$package_name = 'データベース';

$class_name = '接続';

// 変数ファイルをインクルードします

strto lower($project_name . '/' . $package_name . '/' . $class_name) が必要です。

// 変数名前空間内の変数クラスの名前。バックスラッシュを適切に使用するためにどのようにエスケープされるかに注意してください。

$full_qualified_name = $project_name . $package_name ;

$connection = new $ fully_qualified_name();

名前空間キーワード

キーワード名前空間は、名前空間を定義するために使用できるだけでなく、現在の名前空間を表示するためにも使用できます。このときの機能は、クラスの self キーワードと同等です。

コードは以下の通りです:

名前空間 MyProject;

関数 run()

{

echo '名前空間から実行中!';

}

// MyProjectrun に解決されます

run();

// MyProjectrun に明示的に解決されます

namespacerun();

__NAMESPACE__ 定数

self キーワードが現在のクラスの名前を表すことができないのと同様に、namespace キーワードを使用して現在の名前空間の名前を表すことはできません。 __NAMESPACE__ キーワードは、この問題を解決するために使用されます。

コードは次のとおりです:

名前空間 MyProjectDatabase;

// 'MyProjectDatabase'

エコー __NAMESPACE__;

このキーワードは、現在のコードが名前空間から始まるかどうかを判断するのに非常に役立ち、コードのデバッグにも使用できます。

インポートまたはエイリアス

PHPの名前空間はインポートもサポートしており、インポートはエイリアスとも呼ばれます。クラス、インターフェイス、および名前空間のみをインポート (エイリアス化) できます。インポートは、名前空間における非常に便利な基本機能です。これにより、名前の競合を気にせずに外部コード パッケージを使用できるようになります。インポート機能は use キーワードを使用して実装できます。 as キーワードを使用して、インポート時にエイリアスを指定することもできます。

コードは以下の通りです:

[クラス、インターフェース、または名前空間の名前]を[optional_custom_alias]として使用します

完全修飾名は非修飾の別名で置き換えることができるため、使用するたびに完全修飾名を使用する必要がなくなり、コードが簡素化されます。インポートは、名前空間の最上位レベルまたはグローバル空間で使用する必要があります。関数スコープ内でインポート関数を使用するのは不正な構文です。

コードは以下の通りです:

名前空間OtherProject;

// これは、Connection クラスを含む MyProjectDatabase 名前空間を保持します

「myproject/database/connection.php」が必要です;

// MyProject のデータベース接続にアクセスしたい場合は、別の名前空間にいるため、その完全修飾名を使用する必要があります

$connection = new MyProjectDatabaseConnection();

// Connection クラスをインポートします (インターフェイスでもまったく同じように機能します)

MyProjectDatabaseConnection を使用します;

// これでも動作するようになりました! Connection クラスがエイリアス化される前は、PHP は OtherProjectConnection クラスを見つけられませんでした

$connection = new Connection();

// MyProjectDatabase 名前空間をインポートします

MyProjectDatabaseを使用します;

$connection = new DatabaseConnection()

エイリアスを使用して上記のコードを簡素化できます:

コードは以下の通りです:

名前空間OtherProject;

「myproject/database/connection.php」が必要です;

MyProjectDatabaseConnection を MyConnection として使用します;

$connection = new MyConnection();

MyProjectDatabase を MyDatabase として使用します;

$connection = new MyDatabaseConnection();

概要

名前空間は、定義の競合を回避し、より柔軟で組織化されたコード方法を導入するために使用されます。注意すべき点の 1 つは、名前空間を使用する義務はないということです。名前空間はオブジェクト指向と組み合わせて使用​​される方法です。ただし、名前空間を使用すると、コードが新しいレベルに到達し、品質が向上する可能性があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1025900.html技術記事 PHP の名前空間の詳細な紹介 この記事では、主に 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)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles