C库回调PHP中的函数例子的单参数,多参数如何实现的问题

bandaoyu bandaoyu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
本来这个问题在PHP发过,不过我发现绝大部分PHPer对PHP以外的语言,异构能力不太好。所以转到C论坛来了。



PHP的扩展回调PHP中的函数我找到了一个例子:
http://lostphp.com/blog/851.html


这个例子里被回调的PHP函数是单个参数的:
function get_site_url ($prefix) {
return $prefix."www.lostphp.com\n";
}

call_function(null, "get_site_url", "site url:");


但是我的被回调的PHP函数是多个参数的:

function myfunction($height,$width,$name,$weigh) {

echo("my height is $height\n");
......
echo("my weigh is $weigh\n");
}


下面是例子的源码,我应该怎么修改呀?

这里看格式不舒服的话可以到原网页去看:http://lostphp.com/blog/851.html

php代码:

<?php
class demo {
public function get_site_name ($prefix) {
return $prefix."lostphp\n";
}
}
function get_site_url ($prefix) {
return $prefix."www.lostphp.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的源码:

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);
}

这里还有一个例子:

http://blog.csdn.net/xing_____/article/details/78481547

这里还有一个例子:

https://segmentfault.com/a/1190000007648157

都是单个参数的,感觉他们都只是研究性质,都是研究一个简单的 写个文章了事。真实场景下但参数很少的
...全文

相关推荐

PHP回调函数概念与用法实例分析

主要介绍了PHP回调函数概念与用法,简单介绍了回调函数的概念、原理,并结合实例形式分析了回调函数的相关使用技巧,需要的朋友可以参考下

weixin_38537541

php回调函数处理数组操作示例

本文实例讲述了php回调函数处理数组操作。分享给大家供大家参考,具体如下: array_reduce— 用回调函数迭代地将数组简化为单一的值 mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] ) callback【mixed callback ( mixed $carry , mixed $item ) carry–携带上次迭代里的值; 如果本次迭代是第一次,那么这个值是 initial。item –携带了本次迭代的值。】 initial【如果指定了可选参数 initi

weixin_38706007

PHP回调函数及匿名函数概念与用法详解

本文实例讲述了PHP回调函数及匿名函数概念与用法。分享给大家供大家参考,具体如下: 1、回调函数 PHP的回调函数其实和C、Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数; 回调函数执行完毕之后,再回到主线程处理接下来的流程 而在php调用回调函数,不想c以及java那样直接使用函数名作为函数参数,而是在php中使用函数对应的字符串名称执行 1.1、无参数回调 &lt;?php //无参数回调 function callback(){ echo 'execute no parameters callback.<br>'; } function

weixin_38699830

PHP实现动态获取函数参数的方法示例

本文实例讲述了PHP实现动态获取函数参数的方法。分享给大家供大家参考,具体如下: PHP 在用户自定义函数中支持可变数量的参数列表。其实很简单,只需使用 func_num_args() , func_get_arg() ,和 func_get_args()  函数即可。 可变参数并不需要特别的语法,参数列表仍按函数定义的方式传递给函数,并按通常的方式使用这些参数。 1. func_num_args — 返回传入函数的参数总个数 int func_num_args ( void ) 示例 &lt;?php function demo () { $numargs = func_num_args (

weixin_38643212

PHP7扩展开发之基于函数方式使用lib库的方法详解

主要介绍了PHP7扩展开发之基于函数方式使用lib库的方法,结合实例形式分析了PHP7中lib库扩展的封装与调用相关操作技巧,需要的朋友可以参考下

weixin_38543280
评论 3
收藏 已收藏
分享
返回顶部
bandaoyu
C语言 70,039 成员 243,237 内容