• 技术文章 >后端开发 >php教程

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

    2016-06-13 13:04:39原创551
    在PHP5.2中不用Runkit 给类动态添加新方法

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

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

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

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

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

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

    ?

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

    ?

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

    ?

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:vars func function PHP lambda
    上一篇: 几个与php环境有关的命令 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • PHP Hyperf 3.0 发布!新功能速览• 详解PHP怎么实现旋转图片验证• 简单理解PHP超级全局变量• 一起聊聊PHP的路由与伪静态应用• PHP中几种常见的开发模式
    1/1

    PHP中文网