发新话题
打印

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

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

FLEA::getSingleton()

对象注册和检索服务为开发者提供了一个简单易用的对象管理机制,让开发者可以很方便的获取自己需要的对象。

函数原型:

/**
* 返回指定对象的唯一实例
*
* @param string $className
*
* @return object
*/
function & getSingleton($className)
FLEA::getSingleton() 返回指定对象的唯一实例。不管在应用程序的不同位置调用多少次,对于同一个名字的对象,永远都只会返回一个实例。

通常,对于提供各种服务的对象来说,并不需要多个实例。因此使用这个方法,不但简单,而且可以避免不必要的对象构造操作。从而降低了应用程序使用的内存,同时提高了运行性能。

当然,由于 PHP 脚本在每一次请求时都会重新执行,所以当次请求中构造的对象在请求结束后就销毁了。下一次请求会重新构造一个新的对象。但 FLEA::getSingleton() 仍然可以避免在同一次请求中多次构造同名的对象。

使用示例:
复制内容到剪贴板
代码:
$obj =& FLEA::getSingleton('MY_OBJ');
$obj2 =& FLEA::getSingleton('MY_OBJ');
// 此时 $obj 和 $obj2 实际上指向同一个对象实例
在 PHP4 中,一定要使用 =& 来进行对象赋值。否则仍然会导致 PHP 生成对象的副本。

TOP

FLEA::register()

函数原型:

/**
* 将一个对象实例注册到对象实例容器
*
* @param object $obj
* @param string $name
*
* @return object
*/
function & register(& $obj, $name = null)
开发者可以调用 FLEA::register() 将一个对象以指定的名字注册到对象容器中。以便稍后将该对象取出来使用。

不过如果开发者使用 FLEA::getSingleton() 来获取对象实例,那么此时构造的对象会自动注册。

如果没有提供 FLEA::register() 的第二个参数,则使用对象的类名称来注册对象,否则使用指定的名称来注册对象。利用这个特性,可以将同一个对象注册为不同的名字。

如果指定名字的对象已经存在与容器中,则抛出 FLEA_Exception_ExistsKeyName 异常。

$obj =& new MyObject();
FLEA::register($obj);
// 用另一个名字注册同一个对象
FLEA::register($obj, 'MyObject2');
** 请记住,PHP 不存在持久化的对象。每一次请求结束时,脚本创建的所有对象都会被销毁。所以注册到对象容器中的对象也仅在当此请求中有效 .{color: red} **

TOP

FLEA::registry()

函数原型:

/**
* 从对象实例容其中取出指定名字的对象实例,如果没有指定名字则返回包含所有对象的数组
*
* @param string $name
*
* @return object
*/
function & registry($name = null)
FLEA::registry() 用于从对象容器总检索指定名字的对象。如果指定名字的对象不在容器中,则抛出 FLEA_Exception_NotExistsKeyName 异常。

使用示例:
复制内容到剪贴板
代码:
$obj =& new MyObject();
FLEA::register($obj, 'MyObject');
......
// 取出先前注册的对象
$obj2 =& FLEA::registry('MyObject');

TOP

FLEA::isRegistered()

函数原型:

/**
* 检查指定名字的对象是否已经注册
*
* @param string $name
*
* @return boolean
*/
function isRegistered($name)
FLEA::isRegistered() 检查指定名称的对象是否存在于对象容器中。

使用示例:
复制内容到剪贴板
代码:
if (FLEA::isRegistered('MyObject')) {
    echo 'MyObject 对象已经注册';
}

TOP

FLEA::getCache()

基本缓存服务为 FleaPHP 的数据库访问提供支持,用于提高数据库访问组件的性能。

开发者也可以在应用程序中使用基本缓存服务来缓存一些应用程序经常用到的,并较少变动的数据。


函数原型:

/**
* 读取指定缓存的内容,如果缓存内容不存在或失效,则返回 false
*
* @param string $cacheId 缓存ID,不同的缓存内容应该使用不同的ID
* @param int $time 缓存过期时间或缓存生存周期
* @param boolean $timeIsLifetime 指示 $time 参数的作用
* @param boolean $cacheIdIsFilename 指示是否用 $cacheId 作为缓存文件的文件名
*
* @return mixed 返回缓存的内容,缓存不存在或失效则返回 false
*/
function getCache($cacheId, $time = 900, $timeIsLifetime = true, $cacheIdIsFilename = false)
缓存文件名是根据 $cacheId 用 md5 算法生成的。如果希望使用 $cacheId 来指定缓存文件名,则 $cacheIdIsFilename 参数应该为 true。

缓存文件全部保存在应用程序设置 internalCacheDir 指定的目录中。因此该目录必须就有可写权限。

当 $timeIsLifetime 参数为 true 时,该函数会检查缓存文件的最后更新日期加上 $time 是否大于当前时间。如果是,则返回 false,表示缓存的内容已经过期。

如果 $timeIsLifetime 参数为 true,且 $time 参数为 –1,则表示缓存数据永不过期。

如果 $timeIsLifetime 参数为 false,则该函数会检查缓存文件的最后更新日期是否大于 $time 参数指定的时间。如果是,则返回 false。

使用示例:
复制内容到剪贴板
代码:
// 用法 1:缓存数据,缓存数据生存期为 900 秒
$cacheId = 'myDataCache';
$data = FLEA::getCache($cacheId, 900);
if (!$data) {
    // 从数据库读取数据
    $data = $dbo->getAll($sql);
    FLEA::writeCache($cacheId, $data);
}

// 用法 2:以原始文件的最后更新日期来判断缓存是否有效
$xmlFilename = 'myData.xml';
$xmlData = FLEA::getCache($xmlFilename, filemtime($xmlFilename), false);
if (!$xmlData) {
    $xmlData = parseXML($xmlFilename);
    FLEA::writeCache($xmlFilename, $xmlData);
}

TOP

FLEA::writeCache()

函数原型:

/**
* 将变量内容写入缓存
*
* @param string $cacheId
* @param mixed $data
* @param boolean $cacheIdIsFilename 指示是否用 $cacheId 作为文件名
*
* @return boolean
*/
function writeCache($cacheId, $data, $cacheIdIsFilename = false)
该方法各个参数的意义与 FLEA::getCache() 完全一致。

TOP

FLEA::purgeCache()

函数原型:

/**
* 删除指定的缓存内容
*
* @param string $cacheId
* @param boolean $cacheIdIsFilename 指示是否用 $cacheId 作为文件名
*
* @return boolean
*/
function purgeCache($cacheId, $cacheIdIsFilename = false)
该方法各个参数的意义与 FLEA::getCache() 完全一致。

TOP

FLEA::initWebControls();

[b]其它[/b]


函数原型:

/**
* 初始化 WebControls,返回 FLEA_WebControls 对象实例
*
* @return FLEA_WebControls
*/
function & initWebControls()
开发者可以调用 FLEA_WebControls 对象实例的 control() 方法来创建各种控件。

使用示例:

$ui =& FLEA::initWebControls();
// 创建一个宽度为 40 字符,name 和 id 属性为 username 的单行文本框
$ui->control('textbox', 'username', array('size' => 40));

TOP

FLEA::initAjax();

函数原型:

/**
* 初始化 Ajax,返回 FLEA_Ajax 对象实例
*
* @return FLEA_Ajax
*/
function & initAjax()
FLEA_Ajax 对象实例提供了多个方法,让开发者可以为页面上的控件、连接添加 ajax 效果。

使用示例:
复制内容到剪贴板
代码:
$ajax =& FLEA::initAjax();
/**
* 注册页面控件 username 的 change 事件。
* 当该事件出现时,引发一个 ajax 调用。调用地址由 url() 函数生成。
*/
$ajax->registerEvent('username', 'change', url('MyController', 'checkUsername'));

TOP

FLEA::getDBO()

函数原型:

/**
* 返回数据库访问对象实例
*
* @param array|string|int $dsn
*
* @return FLEA_Db_Driver_Prototype
*/
function & getDBO($dsn = 0)
开发者可以直接调用 FLEA::getDBO() 获得一个数据库访问对象。该对象提供了类似 adodb 的方法,为不同的数据库系统提供了一致的访问接口。如果开发者使用表数据入口来访问数据库,那么不需要调用该方法来获取数据库访问对象。

$dsn 参数通常是一个数组,由下列内容组成:

driver 数据库驱动类型,例如 mysql、pgsql 等;
host 数据库所在服务器,通常为 localhost 或 127.0.0.1
port 连接数据库的端口,通常无需指定
login 连接时使用的用户名
password 连接时使用的密码
database 连接后要使用的数据库名
charset 字符集设置,如果没有设置该选项,则以应用程序设置 databaseCharset 为准
options 附加的连接选项
$dsn 参数也可以是一个字符串,规则如下:

driver://login:password@host:port/options
如果多次以相同的 $dsn 参数调用 FLEA::getDBO(),那么返回的数据库对象都将是同一个。

还可以用 FLEA::getDBO() 获得默认的数据库访问对象实例。默认数据库访问对象的连接参数来自应用程序设置 dbDSN。

使用示例:
复制内容到剪贴板
代码:
$dsn = array(...);
$dbo =& FLEA::getDBO($dsn);

// 获取默认的数据库访问对象
$defaultDbo =& FLEA::getDBO();

TOP

发新话题