在PHP5.2中不用Runkit 给类动态添加新方法_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > 在PHP5.2中不用Runkit 给类动态添加新方法

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

 2011/1/9 9:16:40  bardo  http://bardo.javaeye.com  我要评论(0)
  • 摘要:js中的对象可以动态添加方法.在PHP5.2中可用Runkit给类添加方法.而到php5.3,增加了闭包的语法.可以直接动态添加方法.由于Runkit是在PECL中的,一般无法直接使用.所以,在在PHP5.2中,也就受到了限制.所以,人们说PHP5.2仍不是动态结构语言.而js中的对象可以动态添加方法,这对于精简代码,减少继承与扩展,对人总有吸引力.是否真的不能动态添加呢.其实是可以的,只不能人们没有找到实现的方法.现在我们就讲解一下,如何动态添加:<
  • 标签:方法 PHP

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

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

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

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

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

<?php

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函数使用,会影响效率.

?

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

?

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

?

发表评论
用户名: 匿名