在ecmall中一处见到:
$this->show_message('edit_ok',
'back_list', 'index.php?app=my_goods',
'edit_again', 'index.php?app=my_goods&act=edit&id=' . $id);然后找到这个方法 在 - ecapp.base.php 的 show_message() 的代码如下:
function show_message()
{
$args = func_get_args();
call_user_func_array('show_message', $args);
}这个方法中的代码第1行拿到参数, 第2行就又去叫自己(show_message())吗?
问题1: 使用方法的地方用到了参数, 而这个方法本身是()也就是不接受参数, 他使用func_get_args(); 这是 PHP 的方法重载吗?问题2: 更神奇的是, 这样叫来叫去好像也没干什么事情呀, 但是程序这个时候的确是到了 edit_ok 这个页面, 这段的代码是如何执行的呢? 还叫到其他地方的代码吗?
$this->show_message('edit_ok',
'back_list', 'index.php?app=my_goods',
'edit_again', 'index.php?app=my_goods&act=edit&id=' . $id);然后找到这个方法 在 - ecapp.base.php 的 show_message() 的代码如下:
function show_message()
{
$args = func_get_args();
call_user_func_array('show_message', $args);
}这个方法中的代码第1行拿到参数, 第2行就又去叫自己(show_message())吗?
问题1: 使用方法的地方用到了参数, 而这个方法本身是()也就是不接受参数, 他使用func_get_args(); 这是 PHP 的方法重载吗?问题2: 更神奇的是, 这样叫来叫去好像也没干什么事情呀, 但是程序这个时候的确是到了 edit_ok 这个页面, 这段的代码是如何执行的呢? 还叫到其他地方的代码吗?
解决方案 »
- 如何把一个比较简单的php网站做成Drupal的模块?
- PHP中如何调用Linux中的adduser命令???
- 用PHP作为服务端,向客户端推送信息如:新浪加粉的提示
- magic_quotes_gpc之疑问
- zendoptimizer not install
- ThinkPHP 跨域cookie如何实现
- cacti , 无法显示图像 , 请高手帮忙
- 微信发送位置,怎么获取到周边的酒店?
- 多个静态的html页面中共用一段html代码,如何实现套用?不使用iframe----其实是内容站点的左侧列表,希望能写进一个单独的文件
- 返回static的变量变成了null
- MySQL优化的三个基本原则
- PHP 高级技术交流群 66865121 【兼散分】
//are you sure the function in the class , or the class in the ecapp.base.php ?
可能不能这么说, 应该是语法或写法很不一样, 因为PHP感觉写起来非常活, 因为是解释型的语言, 反正拼成了对的语句就能跑, 所以还不太适应
function show_message()
{
$args = func_get_args();
call_user_func_array('show_message', $args);
}请查找一下func_get_args()和call_user_func_array()两个函数的用法
这个show_message()函数最终是eccore/controller/messages.base.php文件中定义的
function test()
{
$arg_list = func_get_args();
foreach($arg_list as $_key => $_value){
echo "Argument $_key is: " . $_value . "<br />\n";
}
}test(0,1,2,3); //output all of argument.//so ...
function show_message()
{
$args = func_get_args();
//now, look here , the functoin that could be auto set the argument.
call_user_func_array('show_message', $args);
}
?>
{
$a = _trigger_message(func_get_args()); _message(serialize($a), E_USER_NOTICE);
}谢谢啊! ecmall本身代码多, 经常跳来跳去, 一会儿就不知道跳到哪里去了, 很想请教一下, 你怎么看出来的呀, 上下文没有提示, F3有时也是错误的定位, 虽然哪边可能有一个 require, 就把 eccore/controller/messages.base.php 包含了, 但是代码还是很多呀, 这个快速地定位全是靠经验还是有点小窍门呀, 和大家分享一下嘛, 嘻嘻down is often used for oral by the way, try to use the word - below, i.e. check the code below, dont make me to correct your writings, iam evil :P
其实coolesting是告诉你如何去读代码并定位,方法非常好我之前有参与过一个ecmall项目的二次开发,代码大概走读过,所以可能会比刚接触的同学稍微快一些