黑基网 首页 学院 编程开发 查看内容

PHP7扩展开发之函数调用

2017-11-9 00:31| 投稿: lofor |来自: 互联网

摘要: 前言在这篇文章中我们将演示如何在扩展中调用函数,和调用对象的方法。代码示例如下:?php class demo { public function get_site_name ($prefix) { return $prefix."信海龙的博客\n"; } } function get_site_u ...

前言

在这篇文章中我们将演示如何在扩展中调用函数,和调用对象的方法。代码示例如下:

<?php
class demo {
	public function get_site_name ($prefix) {
		return $prefix."信海龙的博客\n";
	}
}
function get_site_url ($prefix) {
	return $prefix."www.bo56.com\n";
}

function call_function ($obj, $fun, $param) {
	if ($obj == null) {
		$result = $fun($param);
	} else {
		$result = $obj->$fun($param);
	}
	return $result;
}
$demo = new demo();
echo call_function($demo, "get_site_name", "site name:");
echo call_function(null, "get_site_url", "site url:");
?>

我们将要使用扩展实现call_function方法的功能。

代码

基础代码

这个扩展,我们将在say扩展上增加 call_function() 。say扩展相关代码大家请看这篇博文。PHP7扩展开发之hello word 文中已经详细介绍了如何创建一个扩展和提供了源码下载。

代码实现

call_function 的源码如下:

PHP_FUNCTION(call_function)
{
    zval            *obj = NULL;
    zval     		*fun = NULL;
    zval 			*param = NULL;
    zval 			retval;
    zval 			args[1];

#ifndef FAST_ZPP
    /* Get function parameters and do error-checking. */
    if (zend_parse_parameters(ZEND_NUM_ARGS(), "zzz", &obj, &fun, ¶m) == FAILURE) {
        return;
    }
#else
    ZEND_PARSE_PARAMETERS_START(3, 3)
    	Z_PARAM_ZVAL(obj)
		Z_PARAM_ZVAL(fun)
		Z_PARAM_ZVAL(param)
    ZEND_PARSE_PARAMETERS_END();
#endif

    args[0] = *param;
    if (obj == NULL || Z_TYPE_P(obj) == IS_NULL) {
    	call_user_function_ex(EG(function_table), NULL, fun, &retval, 1, args, 0, NULL);
    } else {
    	call_user_function_ex(EG(function_table), obj, fun, &retval, 1, args, 0, NULL);
    }
    RETURN_ZVAL(&retval, 0, 1);
}

代码解读

参数的接受之前有过文章详细说明过,这里就不再说了。这次我们主要说下 call_user_function_ex 方法的使用。

call_user_function_ex 方法用于调用函数和方法。参数说明如下:

* 第一个参数:方法表。通常情况下,写 EG(function_table) 更多信息查看 http://www.bo56.com/php7%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8Bcg%E5%92%8Ceg/

* 第二个参数:对象。如果不是调用对象的方法,而是调用函数,填写NULL

* 第三个参数:方法名。

* 第四个参数:返回值。

* 第五个参数:参数个数。

* 第六个参数:参数值。是一个zval数组。

* 第七个参数:参数是否进行分离操作。详细的,你可以搜索下 PHP 参数分离。查看相关文章

* 第八个参数:符号表。一般情况写设置为NULL即可。

源码下载

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论


新出炉

返回顶部