在PHP5.2中不要Runkit 给类动态添加新方法
function
lambda
name
在PHP5.2中不用Runkit 给类动态添加新方法
js中的对象可以动态添加方法. 在PHP5.2中可用Runkit 给类添加方法. 而到php5.3,增加了闭包的语法. 可以直接动态添加方法.
由于Runkit 是在PECL中的,一般无法直接使用.所以,在在PHP5.2中,也就受到了限制. 所以,人们说PHP5.2仍不是动态结构语言.
而js中的对象可以动态添加方法,这对于精简代码,减少继承与扩展,对人总有吸引力.
是否真的不能动态添加呢.其实是可以的,只不能人们没有找到实现的方法.
现在我们就讲解一下,如何动态添加:
<?phpclass 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函数使用,会影响效率.
?
尽管如此,却为你能够在虚拟主机的空间,使方法能动态添加成为可能! 所以, 需要时,还是可以用的.
?
当然,如果你有更好的改进办法, 也请你告诉我!
?
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)