ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 介绍 ## 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 的行。