# 介紹
## class
### 什么是class?
一個class只是一個普通的PHP類。除了命名約定(與Fuel中的所有其他類相同)以外,它不需要擴展任何內容或遵循任何約定。
```php
class Session
```
以上類的加載位置為 app / classes / session.php。
### 加載類
與其他框架不同,類不需要手動加載。當您在代碼(控制器,模型等)中引用它們時,它們將被自動加載。
### 子目錄中的類
與[Controllers](控制器.md)一樣,類必須小寫,首字母大寫,而下劃線會將類放入子目錄。
```php
Class Session\_Driver
```
以上類的加載位置為 app / classes / session / driver.php。
### 類和命名空間
為了確定要加載的PHP文件,FuelPHP的自動加載器將使用下劃線將名稱空間和類名稱完全相同。這意味著對于子目錄中的類,您可以混合匹配名稱空間和下劃線以滿足您的需求。
```php
// global namespace, fully underscored class name
class Core_System_Messages {}
// combine a namespace and underscores
namespace Core;
class System_Messages {}
// or fully namespaced
namespace Core\System;
class Messages {}
```
第一種方法是最常用且最容易理解的方法。如果以命名空間的方式去控制版本號,從而控制訪問對應的類,將會非常方便。
## 初始化class
加載類后,可以讓Fuel的自動加載器執行某些自動化任務,就像對`__construct()`類實例進行的操作一樣。通過向`_init()`類添加公共靜態方法來執行此操作。
``` php
class Example {
public static function _init()
{
// this is called upon loading the class
}
}
```
如果已加載的類具有自己的`_init()`方法,但是還需要調用父類的init方法,需要用`parent::_init();` 來加載父類的init方法。
# 擴展核心
## 擴展核心 class
**請參考原文文檔閱讀本段。如果你正在通過本文檔了解該框架。建議你不要擴展核心class。**
**確保知道您在做什么,內核以及您的應用程序將使用同名的擴展內核方法,這可能會導致意外行為。**
* 擴展但不替代核心類
* 擴展并且替換核心類
* 利用包擴展核心
* 擴展限制
### 擴展但不替代核心類
這些是最簡單的,并且可以像您創建的任何其他類一樣工作。只需讓它們擴展全局命名空間中的核心類即可:
~~~
class MyConfig extends Config {}
~~~
### 擴展并且替換核心類
如果您想讓核心擴展以及自己的應用程序使用核心擴展,則需要以相同的名稱進行擴展,但要從“ Fuel \ Core”命名空間中獲取。以下是您在“ fuel / app / classes / lang.php”中創建的Lang類的示例:
~~~
class Lang extends Fuel\Core\Lang {}
~~~
但是默認情況下會忽略與核心類同名的類。為了使自動裝帶器能夠識別您的替換產品,您需要在應用程序引導文件中注冊它。搜索以下行:
~~~
Autoloader::add_classes(array(
// Add classes you want to override here
// Example: 'View' => APPPATH.'classes/view.php',
));
~~~
如注釋中所述,您需要添加新的Lang類,如下所示:
~~~
Autoloader::add_classes(array(
// Add classes you want to override here
// Example: 'View' => APPPATH.'classes/view.php',
'Lang' => APPPATH.'classes/lang.php',
));
~~~
此后,核心類將被您的擴展替換。
> 與完整名稱空間一起使用時,核心類仍然可用。通過上面擴展“ Lang”的示例,您仍然可以通過調用“ Fuel \\ Core \\ Lang”來使用原始版本。
### 利用包擴展核心
通過將軟件包添加為核心命名空間,自動加載器將嘗試從軟件包中加載任何類,然后再從核心中嘗試。但是,您必須在自動加載器中注冊這些類才能檢測到它們(文件系統自動加載器不支持全局別名)。下面是擴展View類的示例。
~~~
Autoloader::add_core_namespace('Example');
Autoloader::add_classes(array(
'Example\\View' => __DIR__.'/classes/view.php',
));
~~~
### 擴展限制
可以從應用程序擴展所有類。大多數類都可以從包中擴展,但有一些例外:
* Fuel
* Config
* Config_Php
* Config_File
* Config_Interface
* Finder
* Arr
* Input
* Security
* Event
* Event\_Instance
* 以及您在app/config/config.php 中使用的任何class
如果您在配置中激活了事件探查器,則無法從包擴展這些類:
* Cookie
* Session
* Session_Cookie(或其他會話驅動程序類,具體取決于您的會話配置)
* Session_Driver
* Date
* Profiler
您可以app/bootstrap.php通過Package::load('mypackagename');在Fuel::init()調用之前添加來手動將程序包加載到文件中,從而解決其中一些限制。如果這樣做,則您的軟件包只能擴展:
* Fuel
* Config
* Package
* Arr
* Finder
#### 自動裝帶器
Autoloader類是一種特殊情況,您只能將`Autoloader`擴展一次并使用。擴展它之后,你必須在 app/bootstrap.php 手動配置關于`Fuel\Core\Autoloader`的信息,不要忘記刪除將核心類別名為 global 的行。