PHP_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 つは、名前空間を使用する義務はないということです。名前空間はオブジェクト指向と組み合わせて使用される方法です。ただし、名前空間を使用すると、コードが新しいレベルに到達し、品質が向上する可能性があります。
。
ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

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

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。
