Commit b6c00809 by Larry Ullman

Edited; already very clean!

parent 76e5875a
...@@ -2,7 +2,7 @@ Class Autoloading ...@@ -2,7 +2,7 @@ Class Autoloading
================= =================
Yii relies on the [class autoloading mechanism](http://www.php.net/manual/en/language.oop5.autoload.php) Yii relies on the [class autoloading mechanism](http://www.php.net/manual/en/language.oop5.autoload.php)
to locate and include required class files. It provides a high-performance class autoloader that is compliant to the to locate and include all required class files. It provides a high-performance class autoloader that is compliant to the
[PSR-4 standard](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md). [PSR-4 standard](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md).
The autoloader is installed when you include the `Yii.php` file. The autoloader is installed when you include the `Yii.php` file.
...@@ -15,7 +15,7 @@ Using the Yii Autoloader <a name="using-yii-autoloader"></a> ...@@ -15,7 +15,7 @@ Using the Yii Autoloader <a name="using-yii-autoloader"></a>
To make use of the Yii class autoloader, you should follow two simple rules when creating and naming your classes: To make use of the Yii class autoloader, you should follow two simple rules when creating and naming your classes:
* Each class must be under some namespace (e.g. `foo\bar\MyClass`). * Each class must be under a namespace (e.g. `foo\bar\MyClass`)
* Each class must be saved in an individual file whose path is determined by the following algorithm: * Each class must be saved in an individual file whose path is determined by the following algorithm:
```php ```php
...@@ -23,30 +23,30 @@ To make use of the Yii class autoloader, you should follow two simple rules when ...@@ -23,30 +23,30 @@ To make use of the Yii class autoloader, you should follow two simple rules when
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php'); $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
``` ```
For example, if a class name is `foo\bar\MyClass`, the [alias](concept-aliases.md) for the corresponding class file path For example, if a class name and namespace is `foo\bar\MyClass`, the [alias](concept-aliases.md) for the corresponding class file path
would be `@foo/bar/MyClass.php`. In order for this alias to be able to be resolved into a file path, would be `@foo/bar/MyClass.php`. In order for this alias to be resolvable into a file path,
either `@foo` or `@foo/bar` must be a [root alias](concept-aliases.md#defining-aliases). either `@foo` or `@foo/bar` must be a [root alias](concept-aliases.md#defining-aliases).
When you are using the [Basic Application Template](start-basic.md), you may put your classes under the top-level When using the [Basic Application Template](start-basic.md), you may put your classes under the top-level
namespace `app` so that they can be autoloaded by Yii without the need of defining a new alias. This is because namespace `app` so that they can be autoloaded by Yii without the need of defining a new alias. This is because
`@app` is a [predefined alias](concept-aliases.md#predefined-aliases), and a class name like `app\components\MyClass` `@app` is a [predefined alias](concept-aliases.md#predefined-aliases), and a class name like `app\components\MyClass`
can be resolved into the class file `AppBasePath/components/MyClass.php`, according to the algorithm we just described. can be resolved into the class file `AppBasePath/components/MyClass.php`, according to the algorithm just described.
In the [Advanced Application Template](tutorial-advanced-app.md), each tier has its own root alias. For example, In the [Advanced Application Template](tutorial-advanced-app.md), each tier has its own root alias. For example,
the front-end tier has a root alias `@frontend` while the back-end tier `@backend`. As a result, you may the front-end tier has a root alias `@frontend`, while the back-end tier `@backend`. As a result, you may
put the front-end classes under the namespace `frontend` while the back-end classes under `backend`. This will put the front-end classes under the namespace `frontend` while the back-end classes are under `backend`. This will
allow these classes to be autoloaded by the Yii autoloader. allow these classes to be autoloaded by the Yii autoloader.
Class Map <a name="class-map"></a> Class Map <a name="class-map"></a>
--------- ---------
The Yii class autoloader supports the *class map* feature which maps class names to the corresponding class file paths. The Yii class autoloader supports the *class map* feature, which maps class names to the corresponding class file paths.
When the autoloader is loading a class, it will first check if the class is found in the map. If so, the corresponding When the autoloader is loading a class, it will first check if the class is found in the map. If so, the corresponding
file path will be included directly without further check. This makes class autoloading super fast. In fact, file path will be included directly without further check. This makes class autoloading super fast. In fact,
all core Yii classes are being autoloaded this way. all core Yii classes are autoloaded this way.
You may add a class to the class map `Yii::$classMap` as follows, You may add a class to the class map, stored in `Yii::$classMap`, using:
```php ```php
Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php'; Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
...@@ -60,14 +60,14 @@ Using Other Autoloaders <a name="using-other-autoloaders"></a> ...@@ -60,14 +60,14 @@ Using Other Autoloaders <a name="using-other-autoloaders"></a>
----------------------- -----------------------
Because Yii embraces Composer as a package dependency manager, it is recommended that you also install Because Yii embraces Composer as a package dependency manager, it is recommended that you also install
the Composer autoloader. If you are using some 3rd-party libraries that have their autoloaders, you should the Composer autoloader. If you are using 3rd-party libraries that have their own autoloaders, you should
also install them. also install those.
When you are using the Yii autoloader together with other autoloaders, you should include the `Yii.php` file When using the Yii autoloader together with other autoloaders, you should include the `Yii.php` file
*after* all other autoloaders are installed. This will make the Yii autoloader to be the first one responding to *after* all other autoloaders are installed. This will make the Yii autoloader the first one responding to
any class autoloading request. For example, the following code is extracted from any class autoloading request. For example, the following code is extracted from
the [entry script](structure-entry-scripts.md) of the [Basic Application Template](start-basic.md). The first the [entry script](structure-entry-scripts.md) of the [Basic Application Template](start-basic.md). The first
line installs the Composer autoloader, while the second line installs the Yii autoloader. line installs the Composer autoloader, while the second line installs the Yii autoloader:
```php ```php
require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/autoload.php');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment