426 123
发新话题
打印

FleaPHP 的内核全揭密(FleaPHP进阶必看)

本主题由 phpres 于 2007-7-16 21:55 加入精华

FleaPHP 的内核全揭密(FleaPHP进阶必看)

介绍

FleaPHP 的核心是一个名为 FLEA 的类以及一些全局函数。

FLEA 类和这些全局函数为 FleaPHP 框架提供了所需的基本服务,包括:应用程序设置服务、对象注册和检索、缓存服务等。

大部分 FleaPHP 的组件都依赖于 FLEA 类和这些全局函数提供的服务。

基本服务

基本服务中最重要的方法是 FLEA::init()。该方法用于初始化 FleaPHP 框架的运行环境。紧接着,开发者需要调用 FLEA::runMVC() 方法来运行应用程序的控制器代码。

TOP

FLEA::init()

函数原型:

/**
* 准备运行环境
*/
function init()
开发者通过 require('FLEA.php') 载入 FleaPHP 框架的核心文件后,需要用 FLEA::loadAppInf() 或者 FLEA::setAppInf() 方法来载入 应用程序设置。接下来,必须调用 FLEA::init() 方法来完成 FleaPHP 框架的初始化工作。

FLEA::init() 主要完成下列工作:

安装 FleaPHP 异常的处理例程
根据应用程序设置设置决定是否载入日志服务
检查 php.ini 中 magic_quotes 设置是否为 on,并将被 PHP 自动转义后的数据撤销转义
根据应用程序设置的 urlMode 决定是否对 URL 进行处理
根据应用程序设置 requestFilters 决定运行哪些输入过滤器
根据应用程序设置 autoLoad 决定自动载入哪些文件
根据应用程序设置 sessionProvider 和 autoSessionStart 决定使用哪一个 session 服务
根据应用程序设置 responseCharset 和 requestCharset 定义常量 RESPONSE_CHARSET 和 DATABASE_CHARSET
根据应用程序设置 multiLangaugeSupport 决定是否载入多语言支持
根据应用程序设置 autoResponseHeader 决定是否自动输出 HTTP HEADER 信息
这些初始化工作对于应用程序的绝大部分来说都是必须。因此务必记得在 require('FLEA.php') 后要调用 FLEA::init()。

使用示例:
复制内容到剪贴板
代码:
<?php

require('FLEA.php');
FLEA::loadAppInf('APP_INF.php');
FLEA::init();
FLEA::runMVC();

TOP

FLEA::runMVC()

函数原型:

/**
* FleaPHP 应用程序 MVC 模式入口
*/
function runMVC()
如果要使用 FleaPHP 的 MVC 模式。那么在载入 FLEA.php 后,调用 FLEA::runMVC() 即可启动 MVC 模式。

在 MVC 模式启动后,FleaPHP 会根据 URL 地址中包含的控制器名称和控制器动作名称,执行开发者编写的控制器代码。

TOP

FLEA::import()

函数原型:

/**
* 导入文件搜索路径
*
* @param string $dir
*/
function import($dir)
如果开发者按照 FleaPHP 开发指南中建议的 命名规范和目录结构来规划自己的应用程序。那么开发者可以很方便的使用 FLEA::loadClass()、FLEA::loadFile() 方法来载入需要的类定义文件和其他文件。同时 FleaPHP 框架本身也能更容易的找到应用程序文件。

为了实现根据类名称查找对应的文件,FleaPHP 内部有一个 CLASS_PATH 变量。FleaPHP 会根据 CLASS_PATH 变量的值来查找文件。

通过 FLEA::import() 方法,可以将一个目录添加到 CLASS_PATH 变量中。从而让 FleaPHP 能够在新的目录中查找需要的文件。

使用示例:

FLEA::import('/var/www/mysite/APP');

TOP

FLEA::loadClass()

函数原型:

/**
* 载入指定类的定义文件
*
* @param string $filename
* @param boolean $noException 如果为 true,则类定义文件没找到时不抛出异常
*
* @return boolean
*/
function loadClass($className, $noException = false)
FLEA::loadClass() 用于载入指定类的定义文件。如果类已经定义,则该方法会直接返回 true。如果找不到指定类的定义文件,则抛出 FLEA_Exception_ExpectedClass 异常。

使用示例:

// 实际载入 Helper/Query.php 文件,并检查该文件中是否定义了 Helper_Query 类
FLEA::loadClass('Helper_Query');
如果开发者使用 PHP5,那么可以在 __autoload() 魔法函数中使用 FLEA::loadClass() 来自动载入类定义文件。但用法略有不同:
复制内容到剪贴板
代码:
function __autoload($class)
{
    FLEA::loadClass($class, true);
    ......
}
   
FLEA::loadClass() 的第二个参数为 true 时,即便需要的类定义文件没有找到,FLEA::loadClass() 也仅仅是返回 false,而不会抛出一个异常。

TOP

FLEA::loadFile()

函数原型:

/**
* 载入指定的文件
*
* @param string $className
* @param boolean $loadOnce 指定为 true 时,FLEA::loadFile() 等同于 require_once
*
* @return boolean
*/
function loadFile($filename, $loadOnce = false)
与 FLEA::loadClass() 类似,FLEA::loadFile() 用于载入指定的文件。而载入的文件仍然遵循FleaPHP 开发指南中建议的 命名规范和目录结构。

使用示例:

// 实际载入 Data/Tables.php 文件
FLEA::loadFile('Data_Tables.php');

TOP

FLEA::getFilePath()

函数原型:

/**
* 按照 FleaPHP 中命名规则,搜索文件
*
* @param string $filename
* @param boolean $return 指示是否直接返回处理后的文件名,而不判断文件是否存在
*
* @return string
*/
function getFilePath($filename, $return = false)
FLEA::getFilePath() 根据 FleaPHP 命名规范将指定的名字转换为实际的文件名。该方法主要用于 FLEA::loadClass() 和 FLEA::loadFile()。

TOP

FLEA::loadAppInf()

应用程序设置部分提供的方法让开发者可以在应用程序中修改和读取设置值。

函数原型:

/**
* 载入应用程序设置
*
* @param mixed $__config 配置数组或配置文件名
*/
function loadAppInf($__flea_internal_config = null)
FLEA::loadAppInf() 从文件或数组中读取设置,并添加到应用程序设置中。如果有同名的设置,则会覆盖原有的值。

使用示例:

// 从文件载入设置
FLEA::loadAppInf('Config/MyAppConfig.php');
包含设置的文件必须用 return 语句返回一个数组,例如:
复制内容到剪贴板
代码:
<?php

// Config/MyAppConfig.php 文件的内容

return array(
    'MyOption' => 'value',
    'MyOptions' => array('option_1' => 'value_1', 'option_2' => 'value_2'),
);
或者从数组中读取设置:
复制内容到剪贴板
代码:
$inf = array(
    'NewOption' => 'value',
);

FLEA::loadAppInf($inf);

TOP

FLEA::getAppInf()

函数原型:

/**
* 取出指定名字的设置值
*
* @param string $option
*
* @return mixed
*/
function getAppInf($option)
开发者可以用 FLEA::getAppInf() 随时从应用程序设置设置中读取需要的值。

使用示例:

// 读取一个字符串
echo FLEA::getAppInf('MyOption');



// 读取一个数组
print_r(FLEA::getAppInf('MyOptions');

TOP

FLEA::setAppInf

函数原型:

/**
* 修改设置值
*
* @param string $option
* @param mixed $data
*/
function setAppInf($option, $data = null)
修改一个或多个应用程序设置的值。

使用示例:
复制内容到剪贴板
代码:
// 修改单个设置
FLEA::setAppInf('MyOption', 'new_value');

// 修改多个设置
$newSettings = array(
    'myAppOpt1' => 'new_value',
    'myAppOpt2' => 'new_value',
);
FLEA::setAppInf($newSettings);

TOP

 426 123
发新话题