ホームページ >バックエンド開発 >PHPチュートリアル >Yii Framework 公式ガイド シリーズ 12 - 基礎知識: パスエイリアスとネームスペース

Yii Framework 公式ガイド シリーズ 12 - 基礎知識: パスエイリアスとネームスペース

黄舟
黄舟オリジナル
2017-02-11 09:47:101492ブラウズ



パスエイリアスは Yii で広く使用されています。パス エイリアスは、ディレクトリまたはファイルのパスに関連付けられます。これは、広く使用されている名前空間形式

RootAlias.path.to.target

に似たドット構文で指定されます。ここで、RootAlias は既存のディレクトリのエイリアスです。 RootAlias 是某个现存目录的别名。

通过使用 YiiBase::getPathOfAlias(), 别名可以被翻译为其相应的路径。 例如, system.web.CController 会被翻译为 yii/framework/web/CController

通过调用 YiiBase::setPathOfAlias(),我们可以定义新的根路径别名。

1. Root Alias

为方便起见,Yii 预定义了以下几个根别名:

  • system: 表示 Yii 框架目录;

  • zii: 表示 Zii 库 目录;

  • application: 表示应用的 基础目录;

  • webroot: 表示 入口脚本 文件所在的目录。此别名从版本 1.0.3 开始有效。

  • ext: 表示包含了所有第三方 扩展 的目录。此别名从版本 1.0.8 开始有效。

额外的,如果应用使用了 模块, (Yii) 也为每个模块ID定义了根别名,指向相应模块的跟目录。 此功能从版本 1.0.3 起有效。

通过使用 YiiBase::getPathOfAlias(), 别名可以被翻译为其相应的路径。 例如, system.web.CController 会被翻译为 yii/framework/web/CController

2. Importing Classes

使用别名可以很方便的导入类的定义。 例如,如果我们想包含 CController 类的定义,我们可以调用如下代码


Yii::import('system.web.CController');

import 方法跟 include 和 require 不同,它更加高效。 导入(import)的类定义并不会真正被包含进来,直到它第一次被引用。 多次导入同样的名字空间也会比 include_once 和 require_once 快得多。

提示: 当引用 Yii 框架定义的类时,我们不需要导入或包含它。所有的核心 Yii 类都已被提前导入了

使用Class Map

从1.1.5版本开始,Yii允许用户定义的类通过使Class Map机制来预先导入,这也是Yii内置类使用的方法。 预先引入机制可以在Yii应用的任何地方使用,无需显式地导入或者包含文件。这个特性对于一个建立在Yii基础上的框架或者类库来说很有用。

若要使用预导入功能,要在CWebApplication::run()执行前执行下面的代码:


Yii::$classMap=array(
    'ClassName1' => 'path/to/ClassName1.php',
    'ClassName2' => 'path/to/ClassName2.php',
    ......
);

3. 导入目录

我们还可以使用如下语法导入整个目录,这样此目录下的类文件就会在需要时被自动包含。


Yii::import('system.web.*');

除 import 外, 别名还在其他许多地方指向类。 例如,路径别名可以传递给 Yii::createComponent() 以创建相应类的实例。 即使类文件在之前从未被包含。

4. Namespace

不要将路径别名和名字空间混淆了,名字空间是指对一些类名的一个逻辑组合,这样它们就可以相互区分开,即使有相同的名字。 而路径别名是用于指向一个类文件或目录。路径别名与名字空间并不冲突。

提示: 由于 5.3.0 版本之前的 PHP 本质上不支持名字空间,你无法创建两个具有相同名字但不同定义的类的实例。 鉴于此,所有的 Yii 框架类都以字母 'C'(意为 'Class') 作前缀,这样它们可以区分于用户定义的类。我们建议前缀 'C' 只保留给 Yii 框架使用,用户定义的类则使用其他的字母作前缀。

5. 使用命名空间的类

使用命名空间的类是指一个在非全局命名空间下声明的类。比如说,类applicationcomponentsGoogleMap 在命名空间applicationcomponents下的类。使用命名空间需要 PHP 5.3.0 或者以上版本。

从1.1.5开始,可以无需显式引入而使用一个包含命名空间的类。比如说,我们可以创建一个applicationcomponentsGoogleMap

YiiBase::getPathOfAlias() を使用すると、エイリアスを対応するパスに変換できます。 たとえば、system.web.CControlleryii/framework/web/CController に変換されます。 🎜🎜 YiiBase::setPathOfAlias() を呼び出すことで、新しいルート パス エイリアスを定義できます。 🎜

1. ルートエイリアス

🎜 便宜上、Yii は次のルートエイリアスを事前定義しています: 🎜
  • 🎜system code>: を表します。 Yii フレームワークディレクトリ; 🎜
  • 🎜zii: Zii ライブラリディレクトリを表します。 🎜
  • 🎜application: 基本を表します。アプリケーションのディレクトリ; 🎜
  • 🎜webroot: エントリ スクリプト ファイルが配置されているディレクトリを示します。このエイリアスはバージョン 1.0.3 以降で有効です。 🎜
  • 🎜ext: すべてのサードパーティ拡張機能を含むディレクトリを表します。このエイリアスはバージョン 1.0.8 以降で有効です。 🎜
🎜さらに、アプリケーションがモジュールを使用する場合、(Yii) は対応するモジュールのルート ディレクトリを指す、各モジュール ID のルート エイリアスも定義します。 この機能はバージョン 1.0.3 以降で利用可能です。 🎜🎜 YiiBase::getPathOfAlias() を使用すると、エイリアスを対応するパスに変換できます。 たとえば、system.web.CControlleryii/framework/web/CController に変換されます。 🎜

2. クラスのインポート

🎜 エイリアスを使用すると、クラス定義を簡単にインポートできます。 たとえば、CController クラスの定義を含める場合は、次のコードを呼び出すことができます 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜 インポート方法は、includerequire とは異なります の方が効率的です。 インポートされたクラス定義は、初めて参照されるまで実際には組み込まれません。 同じ名前空間を複数回インポートする場合も、 include_oncerequire_once よりもはるかに高速になります。 🎜
🎜ヒント: Yii フレームワークによって定義されたクラスを参照する場合、それをインポートまたはインクルードする必要はありません。 すべてのコア Yii クラスは事前にインポートされています。 🎜
🎜クラスマップの使用🎜🎜バージョン 1.1.5 以降、Yii ではクラスを使用してユーザー定義クラスを先頭に追加できるようになりました。マップメカニズムインポート。これは、Yii 組み込みクラスで使用されるメソッドでもあります。 積極的なインポートメカニズムは、ファイルを明示的にインポートしたりインクルードしたりすることなく、Yii アプリケーションのどこでも使用できます。この機能は、Yii 上に構築されたフレームワークまたはライブラリに役立ちます。 🎜🎜事前インポート機能を使用するには、CWebApplication::run() が実行される前に次のコードを実行します。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜

3. インポート ディレクトリ

🎜次の構文を使用してディレクトリ全体をインポートすると、必要に応じてこのディレクトリ内のクラス ファイルが自動的に組み込まれます。 🎜🎜🎜🎜🎜🎜rrreee🎜🎜🎜 import に加えて、エイリアスは他の多くの場所のクラスを指します。 たとえば、パスエイリアスを Yii::createComponent() に渡して、対応するクラスのインスタンスを作成できます。 クラス ファイルがこれまでにインクルードされたことがない場合でも。 🎜

4. 名前空間

🎜 名前空間は、たとえ同じ名前であっても、クラス名の論理的な組み合わせを指します。 パス エイリアスは、クラス ファイルまたはディレクトリを指すために使用されます。パスのエイリアスは名前空間と競合しません。 🎜
🎜ヒント: バージョン 5.3.0 より前の PHP は本質的に名前空間をサポートしていないため、名前は同じで定義が異なるクラスのインスタンスを 2 つ作成することはできません。 このため、ユーザー定義クラスと区別できるように、すべての Yii フレームワーク クラスには文字「C」(「クラス」を意味する) が接頭辞として付けられます。接頭辞「C」は Yii フレームワーク専用に予約し、ユーザー定義クラスには他の文字を接頭辞として付けることをお勧めします。 🎜

5. 名前空間を使用するクラス

🎜 名前空間を使用するクラスは、非グローバル名前空間で宣言されたクラスを指します。たとえば、クラス applicationcomponentsGoogleMap は、名前空間 applicationcomponents の下のクラスです。名前空間を使用するには、PHP 5.3.0 以降が必要です。 🎜🎜 1.1.5 以降、名前空間を明示的に導入せずに、名前空間を含むクラスを使用できるようになりました。たとえば、インポートされたパスを処理することなく applicationcomponentsGoogleMap のインスタンスを作成できるため、Yii の自動インポート メカニズムが強化されます。 🎜

名前空間を使用してクラスを自動的にインポートするには、名前空間の形式がパス エイリアスと類似している必要があります。たとえば、クラス applicationcomponentsGoogleMap 所对应的路径必须和别名application.components.GoogleMap は一貫しています。

上記は、Yii Framework 公式ガイド シリーズ 12 - 基礎知識: パス エイリアスと名前空間です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


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