如何让PHP4模拟支持PHP5的构造或析构函数
PHP5通过__construct()和__destruct()来支持实现Java,C++语言中队构造和析构函数的支持。但当前还有很多的Framework和各类服务器只支持PHP4,是否有办法可以使用PHP4的语法来实现PHP5的构造和析构函数的支持?
其实在Joomla中就对这两个函数进行的封装和模拟,使得这两个PHP5的语法可以在PHP4中使用。
1. __construct的模拟
在Joomla的JObejct中实现了__construct的模拟,所有的对象都继承于JObject,这样其实只需封装了JObject的构造函数就可以实现所有对象的__construct的模拟,PHP4的构造函数必须和类的名称相同,以下就是JObject对__construct的模拟实现。
function JObject()
{
$args = func_get_args();
call_user_func_array(array(&$this, ‘__construct’), $args);
}
2.__destructor的模拟
__destructor在PHP5中的使用并无__construct这么频繁,但不代表他的用途不大。对于数据库的访问的类封装,如果有了__destructor就会非常的方便,可以在析构函数中关闭数据库的连接,所以在Joomla的Database中就实现了__destructor的模拟。
实现代码如下:
function __construct( $options )
{
…
// Register faked “destructor” in PHP4 to close all connections we might have made
if (version_compare(PHP_VERSION, ’5′) == -1) {
register_shutdown_function(array(&$this, ‘__destruct’));
}
}