首页 后端开发 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冒险:如何获得巨型种子
4 周前 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

在C++中,使用Lambda表达式处理异常有两种方法:使用try-catch块捕获异常,并在catch块中处理或重新抛出异常。使用std::function类型的包装函数,其try_emplace方法可以捕获Lambda表达式中的异常。

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

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果,其目的是封装一段可重复使用的代码,提高代码的可重用性和可维护性。

C++ lambda 表达式中闭包的含义是什么? C++ lambda 表达式中闭包的含义是什么? Apr 17, 2024 pm 06:15 PM

在C++中,闭包是能够访问外部变量的lambda表达式。要创建闭包,请捕获lambda表达式中的外部变量。闭包提供可复用性、信息隐藏和延迟求值等优势。它们在事件处理程序等实际情况中很有用,其中即使外部变量被销毁,闭包仍然可以访问它们。

用 C++ lambda 表达式实现多线程编程的优势是什么? 用 C++ lambda 表达式实现多线程编程的优势是什么? Apr 17, 2024 pm 05:24 PM

lambda表达式在C++多线程编程中的优势包括:简洁性、灵活性、易于传参和并行性。实战案例:使用lambda表达式创建多线程​​,在不同线程中打印线程ID,展示了该方法的简洁和易用性。

C++ Lambda 表达式如何实现闭包? C++ Lambda 表达式如何实现闭包? Jun 01, 2024 pm 05:50 PM

C++Lambda表达式支持闭包,即保存函数作用域变量并供函数访问。语法为[capture-list](parameters)->return-type{function-body}。capture-list定义要捕获的变量,可以使用[=]按值捕获所有局部变量,[&]按引用捕获所有局部变量,或[variable1,variable2,...]捕获特定变量。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表达式执行延迟求值?使用lambda表达式创建延迟求值的函数对象。延迟计算推迟到需要时才执行。仅当需要时才计算结果,提高性能。

C++ 函数调用 Lambda 表达式:参数传递和返回值的回调优化 C++ 函数调用 Lambda 表达式:参数传递和返回值的回调优化 May 03, 2024 pm 12:12 PM

在C++中,可以使用Lambda表达式作为函数参数,实现回调函数的灵活性。具体而言:参数传递:通过std::function包装Lambda表达式,以函数指针形式传递给函数。返回值处理:使用std::function声明回调函数指针时指定返回值类型。实战案例:优化GUI事件处理中的回调,避免创建不必要的对象或函数指针,提高代码简洁性和可维护性。

See all articles