当前位置: 首页 > 工具软件 > Runkit > 使用案例 >

php给类动态创建方法,在PHP5.2中不要Runkit 给类动态添加新方法

鄢承运
2023-12-01

在PHP5.2中不用Runkit 给类动态添加新方法

js中的对象可以动态添加方法. 在PHP5.2中可用Runkit 给类添加方法. 而到php5.3,增加了闭包的语法. 可以直接动态添加方法.

由于Runkit 是在PECL中的,一般无法直接使用.所以,在在PHP5.2中,也就受到了限制. 所以,人们说PHP5.2仍不是动态结构语言.

而js中的对象可以动态添加方法,这对于精简代码,减少继承与扩展,对人总有吸引力.

是否真的不能动态添加呢.其实是可以的,只不能人们没有找到实现的方法.

现在我们就讲解一下,如何动态添加:

class ActiveStruct {

var $lambda=array(); //定义保存动态方法的数组

//定义动态添加方法的方法

function addFunction($name,$code) {

$func=create_function('',$code);

$this->lambda[$name] = $func;

}

//为动态添加的方法增加调用接口

function __call($name,$args){

if (array_key_exists($name,$this->lambda)){

$func = $this->lambda[$name];

return $func($args);

}

}

}

//创建对象

$objAcst = new ActiveStruct();

//添加新方法

$objAcst->addFunction('newFunc', '$vars = func_get_args(); return ($vars[0][0].$vars[0][1]);');

//对新方法进行测试

$testResult=$objAcst->newFunc('Hello,',' Php! ');

echo($testResult);

?>

需要注意的是, 使用这一方式,动态添加的方法,我们不能显式声明变量的个数.而在动态添加的方法内部.要获取传入的参数,只能通过:

$vars = func_get_args();

无论多少个变量,传入的参数均是在$vars[0]中

所以,要了解传入多少个参数,那就需要用 count($vars[0]);

对参数的使用则是:

$vars[0][0], $vars[0][1], 依次类推.

另外的不足,则是,因为是用create_function实现的,所以,代码要写成字串.

其次则是 __call函数使用,会影响效率.

尽管如此,却为你能够在虚拟主机的空间,使方法能动态添加成为可能! 所以, 需要时,还是可以用的.

当然,如果你有更好的改进办法, 也请你告诉我!

 类似资料: