ThinkPHP は、高速で互換性があり、シンプルで軽量な国産の PHP 開発フレームワーク を使用すると、開発プロセスを大幅に簡素化し、時間を節約できます。この記事は PHP 中国語向けで、ThinkPHP の非常に重要な概念である 名前空間 を誰もが学ぶのに役立ちます。
名前空間PHP 中国語 Web サイト コースに移動できます: PHP プログラミング名前空間チュートリアルをすぐに学習できます
当社の PHP 中国語 Web サイトでは、関連するビデオ コースも提供しています: Dugu Jiijian (5)_ThinkPHP5 ビデオ チュートリアル
PHP 構文
は関数のオーバーロードメカニズムをサポートしていないため、アプリケーション内に同じ名前のメソッドが 2 つある場合はどうすればよいですか? Yii フレームワークでは、名前の重複によって引き起こされる問題を回避するために、すべてのクラスの前に単語 C が付けられており、名前空間の概念が ThinkPHP に導入されました。そのうちのいくつかは特別な注意が必要です:A) ネーミング空間は仮想定義空間です。定数 (const 定義された定数、定義されていない定数) は有効です。
d) 名前空間には 3 つのアクセス方法があります: 非修飾名アクセス方法、完全修飾名アクセス方法。 以下、一つずつ詳しく説明していきます。 1. 名前空間は、関数、クラス、定数 (const 定義定数、未定義定数) に対してのみ有効です。定義を使用して同じ名前の 2 つの定数を定義しようとするとどうなるでしょうか?
ブラウザで開くと、次のエラーが報告されます:
したがって、名前空間は関数、クラス、および定数 (const で定義された定数、非定数) に対してのみ有効です。 -define で定義された定数)。
2. マルチレベルの名前空間と 3 つのアクセス方法
上記で宣言された名前空間 space1 と space2 はどちらも単一レベルの名前空間であり、space1space2space3 の形の名前空間はマルチレベルの名前空間であり、セパレータです。は 。以下に 3 つの名前空間アクセス方法を紹介します。
2. 完全修飾名アクセス方式
name2space2 名前空間の name1space1 にある getmsg() メソッドにアクセスしたい場合は、完全修飾名アクセス方式 (絶対パスアクセスと同等) を使用できます。
つまり、上記のコードの出力は次のようになります: こんにちは。
修飾名アクセス方式と完全修飾名アクセス方式の違いは前面のみです。修飾名アクセスを使用して上記の例にアクセスする場合は、最後の行を name1space1getmsg();
に変更します。この時点でブラウザで開くと、次のエラーが見つかります:
Prompt that we can not find以下の名前空間 name2space2name1space1 getmsg() 関数。その理由は、修飾名アクセス メソッド が相対パス アクセスと同等であるためです。現在の名前空間にアクセスするには、name1space1getmsg() 関数が使用されます。名前空間が見つからない場合は、エラーが報告されるだけです。したがって、name2space2name1space1 という名前の別の名前空間を宣言すると、上記のアクセスは次のように正常に実行できます。
出力結果は次のようになります: hello-world。
上記の例を通して、現在の名前空間にアクセスする際に、別の名前を使用したい場合に、空間内の関数、定数、またはクラス要素を使用するには、コードを記述するのが面倒であるため、名前空間を導入し、修飾名アクセスを使用してアクセス プロセスを簡素化できます。
出力結果は次のとおりです: hello Dog
名前空間の導入と同様に、use キーワードを使用して空間要素を導入しますでは。制限のないアクセス方法を使用して直接アクセスできます。ただし、導入したクラスと同じ名前のクラスは現在の名前空間に存在できません。存在しない場合はエラーが発生します。
出力結果は、犬のルバーブです。
namespaceキーワードを使用して名前空間を宣言しない場合、それはパブリックスペースに属します。
ここでは 2 つの php ファイル、1.php と 2.php を作成します。1.php 名前空間 は name1space1、2.php はパブリック空間です。
1.php:
namespace name1\space1; header("content-type:text/html;charset=utf-8"); class Animal { public $obj = 'dog'; static $name = '大黄'; } function getmsg() { echo 'hello'; } const MN = 123; //在命名空间中引入公共命名空间 include ('./2.php'); getmsg(); //访问的是当前空间下的getmsg()函数 echo '</br>'; \getmsg(); //访问的是公共命名空间(即2.php文件)下的getmsg()函数 echo '</br>'; echo MN; //会先在当前命名空间下寻找MN常量,如果找到就输出,如果找不到,就会去公共命名空间寻找MN常量 echo '</br>'; echo \MN; //访问的是公共命名空间(即2.php文件)下的MN常量
2.php:
//没有指定命名空间,则其属于公共命名空间 function getmsg() { echo 'world'; } const MN = '456';
1.phpをブラウザで開くと、出力結果は次のようになります:
hello
world
123
456
thinkphp5.0 では、名前空間は実際のディレクトリではなく仮想定義空間です。ただ、公式が名前空間を宣言するとき、名前空間の名前は意図的にディレクトリ構造に対応します。
たとえば、application/index/controller フォルダーの下にある Index.php ファイルを開きます。その名前空間は appindexcontroller です。ディレクトリ構造に存在しません。
名前空間のエイリアス
このフレームワークを使用すると、名前空間のエイリアスを定義できます。例:
namespace app\index\model; use think\Model; class User extends Model { }
コントローラーの元の呼び出しメソッドは次のとおりです:
namespace app\index\controller; use app\index\model\User; class Index { public function index() { $user = new User(); } }
アプリケーションに名前空間を登録する場合public ファイルのエイリアスは次のとおりです:
\think\Loader::addNamespaceAlias('model','app\index\model');
次に、上記のコントローラー コードを次のように変更できます:
namespace app\index\controller; use model\User; class Index { public function index() { $user = new User(); } }
相关资料推荐: