ホームページ  >  記事  >  2017 年にフレームワークを学ぶ初心者にとって必須: Thinkphp5 フレームワーク チュートリアルの名前空間の詳細な説明

2017 年にフレームワークを学ぶ初心者にとって必須: Thinkphp5 フレームワーク チュートリアルの名前空間の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-06 09:27:222187ブラウズ

ThinkPHP は、高速で互換性があり、シンプルで軽量な国産の PHP 開発フレームワーク を使用すると、開発プロセスを大幅に簡素化し、時間を節約できます。この記事は PHP 中国語向けで、ThinkPHP の非常に重要な概念である 名前空間 を誰もが学ぶのに役立ちます。

名前空間

ThinkPHP は、名前空間定義とクラス

ライブラリ ファイルの自動ロードを使用します。これにより、複数のモジュールと Composer クラス ライブラリ間の名前空間の競合問題が効果的に解決され、より効率的なクラス ライブラリの自動ロード メカニズムが実装されます。

PHP 中国語 Web サイト コースに移動できます: PHP プログラミング名前空間チュートリアルをすぐに学習できます

当社の PHP 中国語 Web サイトでは、関連するビデオ コースも提供しています: Dugu Jiijian (5)_ThinkPHP5 ビデオ チュートリアル

2017 年にフレームワークを学ぶ初心者にとって必須: Thinkphp5 フレームワーク チュートリアルの名前空間の詳細な説明PHP 構文

は関数のオーバーロードメカニズムをサポートしていないため、アプリケーション内に同じ名前のメソッドが 2 つある場合はどうすればよいですか? Yii フレームワークでは、名前の重複によって引き起こされる問題を回避するために、すべてのクラスの前に単語 C が付けられており、名前空間の概念が ThinkPHP に導入されました。そのうちのいくつかは特別な注意が必要です:

A) ネーミング空間は仮想定義空間です。定数 (const 定義された定数、定義されていない定数) は有効です。

d) 名前空間には 3 つのアクセス方法があります: 非修飾名アクセス方法、完全修飾名アクセス方法。

以下、一つずつ詳しく説明していきます。

1. 名前空間は、関数、クラス、定数 (const 定義定数、未定義定数) に対してのみ有効です。


ここで、2 つの名前空間 space1 と space2 の下に、同じ名前の関数 getmsg()、同じ名前の定数 a、およびクラス Animal があります。異なる名前空間にあるため、同じ名前を付けてもエラーは発生しません。ブラウザで開くと、helloworld という出力が表示されます。

定義を使用して同じ名前の 2 つの定数を定義しようとするとどうなるでしょうか?

ブラウザで開くと、次のエラーが報告されます:

したがって、名前空間は関数、クラス、および定数 (const で定義された定数、非定数) に対してのみ有効です。 -define で定義された定数)。

2. マルチレベルの名前空間と 3 つのアクセス方法


上記で宣言された名前空間 space1 と space2 はどちらも単一レベルの名前空間であり、space1space2space3 の形の名前空間はマルチレベルの名前空間であり、セパレータです。は 。以下に 3 つの名前空間アクセス方法を紹介します。

1. 非修飾名アクセス方法

非修飾名アクセス方法でアクセスする場合、現在の名前空間の下にある関数 (クラス) にアクセスします。定数) であるため、上記のコードの出力結果は次のようになります。

2. 完全修飾名アクセス方式

name2space2 名前空間の name1space1 にある getmsg() メソッドにアクセスしたい場合は、完全修飾名アクセス方式 (絶対パスアクセスと同等) を使用できます。

つまり、上記のコードの出力は次のようになります: こんにちは。

3. 修飾名アクセス方式

修飾名アクセス方式と完全修飾名アクセス方式の違いは前面のみです。修飾名アクセスを使用して上記の例にアクセスする場合は、最後の行を name1space1getmsg();

に変更します。この時点でブラウザで開くと、次のエラーが見つかります:

Prompt that we can not find以下の名前空間 name2space2name1space1 getmsg() 関数。その理由は、修飾名アクセス メソッド が相対パス アクセスと同等であるためです。現在の名前空間にアクセスするには、name1space1getmsg() 関数が使用されます。名前空間が見つからない場合は、エラーが報告されるだけです。したがって、name2space2name1space1 という名前の別の名前空間を宣言すると、上記のアクセスは次のように正常に実行できます。

出力結果は次のようになります: hello-world。

3. 名前空間と空間クラス要素の導入メカニズム

1. 名前空間の導入

上記の例を通して、現在の名前空間にアクセスする際に、別の名前を使用したい場合に、空間内の関数、定数、またはクラス要素を使用するには、コードを記述するのが面倒であるため、名前空間を導入し、修飾名アクセスを使用してアクセス プロセスを簡素化できます。

出力結果は次のとおりです: hello Dog

2. 空間要素の導入

名前空間の導入と同様に、use キーワードを使用して空間要素を導入しますでは。制限のないアクセス方法を使用して直接アクセスできます。ただし、導入したクラスと同じ名前のクラスは現在の名前空間に存在できません。存在しない場合はエラーが発生します。

出力結果は、犬のルバーブです。

4. パブリックスペース

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 &#39;</br>&#39;;
\getmsg();      //访问的是公共命名空间(即2.php文件)下的getmsg()函数

echo &#39;</br>&#39;;
echo MN;          //会先在当前命名空间下寻找MN常量,如果找到就输出,如果找不到,就会去公共命名空间寻找MN常量
echo &#39;</br>&#39;;
echo  \MN;         //访问的是公共命名空间(即2.php文件)下的MN常量

2.php:

//没有指定命名空间,则其属于公共命名空间
function getmsg()
{
    echo 'world';
}

const MN = '456';

1.phpをブラウザで開くと、出力結果は次のようになります:

hello
world
123
456

5。仮想定義空間は実際のディレクトリではありません

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(&#39;model&#39;,&#39;app\index\model&#39;);

次に、上記のコントローラー コードを次のように変更できます:

namespace app\index\controller;
use model\User;
class Index
{
 public function index()
 {
  $user = new User();
 }
}

相关资料推荐: 

1. 什么是php命名空间?命名空间用法实例详解

2. php命名空间与自动加载类用法实例详解

3. php关于use、命名空间、引入类文件和自动加载类的实例详解

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。