PHP名前空間の使い方を詳しく解説(Namespace)_PHPチュートリアル
名前空間については、公式ドキュメントで詳しく説明されています[表示]。ここでいくつかの練習と要約を行いました。
名前空間の最も明確な目的の 1 つは、重複した名前の問題を解決することです。PHP では、2 つの関数またはクラスが同じ名前を持つことを許可しません。そうしないと、致命的なエラーが発生します。この場合、名前の重複を避ける限り解決できます。最も一般的な方法は、プレフィックスを合意することです。
例: プロジェクトには記事とメッセージボードの 2 つのモジュールがあり、それぞれにユーザー メッセージを処理するためのクラス Comment があります。後で、すべてのユーザー メッセージの情報統計関数を追加する場合があります。たとえば、すべてのメッセージの数を取得したいとします。この時点で、Comment によって提供されるメソッドを呼び出すことは良い考えですが、それぞれの Comment クラスを同時に導入することは明らかに不可能であり、コードでエラーが発生し、Comment を別の場所に書き換えるとエラーが発生します。メンテナンス性が低下します。現時点では、次のようにクラス名の前にモジュール名を追加して、クラス名を再構築することしかできません。
ご覧のとおり、名前が非常に長くなりました。これは、将来コメントを使用するときに、より多くのコード (少なくともより多くの文字) が記述されることを意味します。さらに、将来的に各モジュールに統合関数を追加したり、相互に呼び出したりする場合は、名前が重複した場合に名前を再構築する必要があります。もちろん、プロジェクトの開始時にこの問題に気づき、名前付けルールを指定することで、この問題は回避できます。別の解決策は、名前空間を使用することです。
注:
基本
名前空間は、コードを異なる空間(領域)に分割します。 各空間内の定数、関数、クラスの名前(面倒なので、以下では要素と呼びます)は互いに影響しません。同様に、私たちはよく「カプセル化」という概念を参照します。
名前空間を作成するには、次のように namespace キーワードを使用する必要があります:
namespace Article;
//スクリプトの前にロジック コードを書きます
$path = "/";
クラスコメント{ }
名前空間の記事;
?>
//例 2
//一部の文字がスクリプトの前に出力されます
名前空間の記事;
?>
以下の 2 つの名前空間を作成し、これら 2 つの空間のそれぞれに Comment クラス要素を追加しました:
namespace Article;
クラス Comment { }
//「MessageBoard」という名前の名前空間を作成します
namespace MessageBoard;
Comment { }
?>
名前空間の記事;
クラスコメント{ }
名前空間メッセージボード;
クラスコメント{ }
//現在のスペース(MessageBoard)のCommentクラスを呼び出します
$comment = new Comment();
//Article スペースの Comment クラスを呼び出します
?>
メッセージボードスペースの記事スペースでCommentクラスを呼び出す際に、ファイルパスのような構文が使用されていることがわかります: スペース名 要素名
クラスを除き、関数と定数の使い方は同じです。以下では、2つのスペースに新しい要素を作成し、その値をメッセージボードスペースに出力します。
名前空間の記事;
const PATH = '/article';
関数 getCommentTotal() {
100 を返す;
}
クラスコメント{ }
名前空間メッセージボード;
const PATH = '/message_board';
関数 getCommentTotal() {
300 を返す;
}
クラスコメント{ }
//現在のスペースで定数、関数、クラスを呼び出します
echo PATH; ///message_board
echo getCommentTotal() //300
$comment = new Comment();
//記事空間の定数、関数、クラスを呼び出す
echo ArticlePATH; ///article
echo ArticlegetCommentTotal() //100
$article_comment = new ArticleComment();
?>
これで、Article スペースの要素データを取得できました。
サブスペース
ネームスペースの呼び出し構文はファイル パスに似ており、これによりサブスペースをカスタマイズして各空間間の関係を記述することができます。
申し訳ありませんが、2 つのモジュールの記事と掲示板が実際には同じブログ プロジェクト内にあることを忘れていました。名前空間を使用してそれらの関係を表現すると、次のようになります:
//この名前空間を使用して blog の下の記事モジュールを表します
namespace BlogArticle;
クラスコメント{ }
//この名前空間を使用して、ブログ
名前空間 BlogMessageBoard;
クラスコメント{ }
//現在のスペースのクラスを呼び出します
$comment = new Comment();
//BlogArticle スペースのクラスを呼び出します
$article_comment = new BlogArticleComment();
?>
さらに、部分空間は BlogArticleArchivesDate などの多くのレベルを定義することもできます
パブリックスペース
いくつかの便利な関数とクラスを含む common_inc.php スクリプトファイルがあります:
関数 getIP() { }
クラス FilterXSS { }
?>
このスクリプトを名前空間に導入すると、スクリプト内の要素はこの名前空間に属しなくなります。このスクリプトで他の名前空間が定義されていない場合、その要素は常にパブリック空間にあります:
名前空間ブログ記事;
//スクリプトファイルを導入します
include './common_inc.php';
$filter_XSS = new FilterXSS(); //致命的なエラー: BlogArticleFilterXSS クラスが見つかりません
$filter_XSS = 新しい FilterXSS() //修正します
;?>
パブリック スペースを呼び出す方法は、要素名の前に直接追加することです。そうしないと、PHP パーサーは現在のスペース内の要素を呼び出したいと認識します。カスタム要素に加えて、PHP 独自の要素も含まれており、それらはすべてパブリック スペースに属します。
実際には、パブリックスペースの関数と定数は追加しなくても通常どおり呼び出すことができることに言及したいと思います(なぜPHPがこれを行うのか理解できません)が、要素を正しく区別するために、呼び出すときに
を追加することをお勧めします。機能。
名前の用語
エイリアスとインポートについて話す前に、スペースの 3 つの名前の用語と、PHP がそれらを解析する方法について知っておく必要があります。公式ドキュメントは非常に優れているので、そのまま使用しました。
1. 修飾されていない名前、またはプレフィックスのないクラス名 ($comment = new Comment(); など)。現在の名前空間が BlogArticle の場合、Comment は BlogArticleComment として解析されます。コメントを使用するコードに名前空間 (グローバル空間) のコードが含まれていない場合、コメントはコメントとして解析されます。
2. 修飾名、またはプレフィックスを含む名前 ($comment = new ArticleComment(); など)。現在の名前空間が Blog の場合、Comment は BlogArticleComment として解析されます。コメントを使用するコードに名前空間 (グローバル空間) のコードが含まれていない場合、コメントはコメントとして解析されます。
3. 完全修飾名、または $comment = new ArticleComment(); などのグローバル接頭辞演算子を含む名前。この場合、Comment はコード内で常にリテラル名 ArticleComment に解決されます。
実際、これら 3 つの名前は、ファイル名 (comment.php など)、相対パス名 (./article/comment.php など)、絶対パス名 (/blog/article/comment など) と比較できます。 php)なので、より理解しやすくなる可能性があります。
それらを表すためにいくつかの例を使用しました:
//スペース ブログを作成する
名前空間ブログ;
クラスコメント{ }
//現在のブログ スペースを示す非修飾名
//この呼び出しは BlogComment();
$blog_comment = new Comment();
//ブログスペースに関連することを示す修飾名
//この呼び出しは BlogArticleComment();
$article_comment = new ArticleComment(); //クラスの前にバックスラッシュはありません
//ブログスペースへの絶対を示す完全修飾名
//この呼び出しは BlogComment();
$article_comment = new BlogComment(); //クラスの前にバックスラッシュがあります
//ブログスペースへの絶対を示す完全修飾名
//この呼び出しは BlogArticleComment();
$article_comment = new BlogArticleComment(); //クラスの前にバックスラッシュがあります
//ブログの部分空間記事を作成
namespace BlogArticle;
クラスコメント{ }
?>
実はこれまで非修飾名と完全修飾名を使ってきましたが、ようやく名前で呼べるようになりました。
エイリアスとインポート
エイリアスとインポートは、名前空間要素を呼び出すためのショートカットと考えることができます。 PHP は関数や定数のインポートをサポートしていません。
これらはすべて use 演算子を使用して実装されます:
名前空間ブログ記事;
クラスコメント{ }
//BBS スペースを作成します (フォーラムを開く予定です)
namespace BBS;
//名前空間をインポートします
use BlogArticle;
//名前空間をインポートした後、修飾名を使用して要素を呼び出すことができます
$article_comment = new ArticleComment();
//ネームスペースにエイリアスを使用する
use BlogArticle as Arte;
//スペース名の代わりにエイリアスを使用する
$article_comment = new ArteComment();
//クラスをインポートする
use BlogArticleComment;
//クラスをインポートした後、非修飾名を使用して要素を呼び出すことができます
$article_comment = new Comment();
//クラスにエイリアスを使用する
use BlogArticleComment as Comt;
//スペース名の代わりにエイリアスを使用する
$article_comment = new Comt();
?>
要素をインポートするときに、現在のスペースに同じ名前の要素がある場合はどうなるかに気付きました。明らかに、結果は致命的なエラーになります。
例:
名前空間ブログ記事;
クラスコメント{ }
名前空間BBS;
クラスコメント{ }
クラス Comt { }
//クラスをインポートします
use BlogArticleComment;
$article_comment = new Comment(); //現在のスペースのコメントと競合し、プログラムは致命的なエラーを生成します
//クラスのエイリアスを使用する
use BlogArticleComment as Comt;
$article_comment = new Comt(); //現在のスペースの Comt と競合し、プログラムは致命的なエラーを生成します
?>
動的呼び出し
PHP は、動的アクセス要素の名前空間キーワードと __NAMESPACE__ マジック定数を提供します。 __NAMESPACE__ には、文字列を組み合わせることで動的にアクセスできます:
名前空間ブログ記事;
const PATH = '/ブログ/記事';
クラスコメント{ }
//namespace キーワードは現在のスペースを表しますecho namespacePATH; ///Blog/article
$comment = new namespaceComment();
//マジック定数 __NAMESPACE__ の値は現在のスペース名です
// を文字列に結合して
$comment_class_name = 'Comment';
$comment = new $comment_class_name と呼びます。 ();
?>
上記の動的呼び出しの例では、文字列形式での動的呼び出しメソッドを示しましたが、このメソッドを使用する場合は、2 つの点に注意する必要があります。問題。
1. 二重引用符を使用すると特殊文字がエスケープされる場合があります
名前空間ブログ記事;
クラス名 { }
//BlogArticlename
$class_name = __NAMESPACE__ . //ただし、n は改行文字としてエスケープされます;
$name = new $class_name() //致命的なエラーが発生しました
?>
2. 制限された名前とはみなされません
PHP は、スクリプトのコンパイル時に要素が配置されるスペースとインポート ステータスを決定します。スクリプトを解析するとき、文字列形式の呼び出しは非修飾名と完全修飾名のみとみなされ、修飾名であることはできません。
名前空間ブログ;
//Common クラスをインポートします
use BlogArticleCommon;
//非修飾名を使用して BlogArticleCommon を呼び出したいです
$common_class_name = 'Common';
//実際には非修飾名とみなされます。これは、しかし、現在のクラスは共通クラスを作成しませんでした
$common = new $common_class_name(); //致命的なエラーが発生しました: 共通クラスが存在しません
//修飾名を使用して BlogArticleCommon を呼び出したいです
$common_class_name = 'ArticleCommon';
//これは実際には完全修飾名とみなされ、これは Article スペースの下の Common クラスを意味しますが、定義するのは BlogArticle だけですArticle スペースの代わりに下のスペース
$common = new $common_class_name() //致命的なエラーが発生しました: ArticleCommon クラスが存在しません
名前空間ブログ記事;
クラス共通{ }
?>
概要
私は PHP 名前空間に触れたばかりなので、実践されていない提案をいくつかすることはできません。個人的には、プラグインや一般的なライブラリを作成する場合、名前空間の役割と機能は非常に強力だと思います。名前の重複を心配する必要はなくなりました。ただし、ある程度プロジェクトが進み、名前空間の追加などで名前の重複問題を解決する必要が出てきたら、名前のリファクタリング以上の作業量になると思います。その構文によってプロジェクトがある程度複雑になることは認めざるを得ません。そのため、プロジェクトの開始時から綿密に計画し、命名規則を策定する必要があります。

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

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

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

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

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

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

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

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

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
