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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1025900.html技術記事 PHP の名前空間の詳細な紹介 この記事では、主に PHP の名前空間の詳細な紹介を紹介します この記事では、名前空間 (ネームスペース) の概念、名前空間の使用法、名前付けの定義について説明します...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP多次元アレイの要素の総数を計算する方法は?PHP多次元アレイの要素の総数を計算する方法は?May 15, 2025 pm 09:00 PM

PHP多次元アレイの要素の総数を計算することは、再帰的または反復的な方法を使用して行うことができます。 1.再帰的な方法は、アレイを通過し、ネストされた配列を再帰的に処理することによりカウントされます。 2。反復法は、スタックを使用して再帰をシミュレートして深さの問題を回避します。 3. array_walk_recursive関数も実装できますが、手動でカウントする必要があります。

PHPのDo-While Loopsの特徴は何ですか?PHPのDo-While Loopsの特徴は何ですか?May 15, 2025 pm 08:57 PM

PHPでは、ループの特性は、ループ本体が少なくとも1回実行されることを確認し、条件に基づいてループを続行するかどうかを決定することです。 1)条件付きチェックの前にループ本体を実行します。これは、ユーザー入力検証やメニューシステムなど、操作を少なくとも1回実行する必要があるシナリオに適しています。 2)ただし、do-whileループの構文は、初心者間の混乱を引き起こす可能性があり、不要なパフォーマンスオーバーヘッドを追加する可能性があります。

PHPで弦をハッシュする方法は?PHPで弦をハッシュする方法は?May 15, 2025 pm 08:54 PM

PHPの効率的なハッシュ文字列は、次の方法を使用できます。1。MD5関数を使用して高速ハッシュを使用しますが、パスワードストレージには適していません。 2。SHA256関数を使用して、セキュリティを改善します。 3. password_hash関数を使用してパスワードを処理して、最高のセキュリティと利便性を提供します。

PHPに配列スライディングウィンドウを実装する方法は?PHPに配列スライディングウィンドウを実装する方法は?May 15, 2025 pm 08:51 PM

PHPに配列スライディングウィンドウを実装することは、slidewindowとslidewindowaverage関数によって実行できます。 1. SlideWindow関数を使用して、配列を固定サイズのサブアレイに分割します。 2。各ウィンドウの平均値を計算するには、SlideWindowaverage関数を使用します。 3.リアルタイムのデータストリームの場合、非同期処理と外れ値検出を使用して使用できます。

PHPで__CLONEメソッドを使用する方法は?PHPで__CLONEメソッドを使用する方法は?May 15, 2025 pm 08:48 PM

PHPの__Cloneメソッドは、オブジェクトクローン時にカスタム操作を実行するために使用されます。クローンキーワードを使用してオブジェクトをクローニングする場合、オブジェクトに__クローンメソッドがある場合、メソッドが自動的に呼び出され、クローン型属性をリセットしてクローンオブジェクトの独立性を確保するなど、クローンプロセス中にカスタマイズされた処理を許可します。

PHPでGOTOステートメントを使用する方法は?PHPでGOTOステートメントを使用する方法は?May 15, 2025 pm 08:45 PM

PHPでは、GOTOステートメントは、プログラムの特定のタグに無条件にジャンプするために使用されます。 1)複雑なネストされたループまたは条件付きステートメントの処理を簡素化することができますが、2)GOTOを使用すると、コードの理解と維持が困難になる場合があります。3)構造化された制御ステートメントの使用を優先することをお勧めします。全体として、gotoは注意して使用する必要があり、コードの読みやすさと保守性を確保するために、ベストプラクティスに従う必要があります。

PHPにデータ統計を実装する方法は?PHPにデータ統計を実装する方法は?May 15, 2025 pm 08:42 PM

PHPでは、組み込み関数、カスタム関数、およびサードパーティライブラリを使用してデータ統計を実現できます。 1)array_sum()やcount()などの組み込み関数を使用して、基本統計を実行します。 2)カスタム関数を記述して、中央値などの複雑な統計を計算します。 3)PHP-MLライブラリを使用して、高度な統計分析を実行します。これらの方法により、データ統計を効率的に実行できます。

PHPで匿名関数を使用する方法は?PHPで匿名関数を使用する方法は?May 15, 2025 pm 08:39 PM

はい、PHPの匿名関数は、名前のない関数を参照します。これらは、他の関数へのパラメーターとして、および関数の返品値として渡すことができ、コードをより柔軟で効率的にします。匿名関数を使用する場合、範囲とパフォーマンスの問題に注意を払う必要があります。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境