首頁 後端開發 php教程 在PHP5.2中不要Runkit 给类动态添加新方法

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

Jun 13, 2016 am 11:00 AM
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

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

lambda 表達式在 C++ 中如何處理異常? lambda 表達式在 C++ 中如何處理異常? Apr 17, 2024 pm 12:42 PM

lambda 表達式在 C++ 中如何處理異常?

function是什麼意思 function是什麼意思 Aug 04, 2023 am 10:33 AM

function是什麼意思

C++ lambda 表達式中閉包的意思是什麼? C++ lambda 表達式中閉包的意思是什麼? Apr 17, 2024 pm 06:15 PM

C++ lambda 表達式中閉包的意思是什麼?

用 C++ lambda 表達式實作多執行緒程式設計的優點是什麼? 用 C++ lambda 表達式實作多執行緒程式設計的優點是什麼? Apr 17, 2024 pm 05:24 PM

用 C++ lambda 表達式實作多執行緒程式設計的優點是什麼?

C++ Lambda 表達式如何實作閉包? C++ Lambda 表達式如何實作閉包? Jun 01, 2024 pm 05:50 PM

C++ Lambda 表達式如何實作閉包?

C++ lambda 表達式如何捕捉外部變數? C++ lambda 表達式如何捕捉外部變數? Apr 17, 2024 pm 04:39 PM

C++ lambda 表達式如何捕捉外部變數?

如何使用 C++ lambda 表達式執行延遲求值? 如何使用 C++ lambda 表達式執行延遲求值? Apr 17, 2024 pm 12:36 PM

如何使用 C++ lambda 表達式執行延遲求值?

C++ 函式呼叫 Lambda 表達式:參數傳遞與傳回值的回呼最佳化 C++ 函式呼叫 Lambda 表達式:參數傳遞與傳回值的回呼最佳化 May 03, 2024 pm 12:12 PM

C++ 函式呼叫 Lambda 表達式:參數傳遞與傳回值的回呼最佳化

See all articles