php中变长参数在5.3以后如何实现

php中文网
发布: 2016-06-23 09:09:38
原创
1044人浏览过

我想写一个变长参数的函数, 上网查询后找到func_num_args、func_get_arg和func_get_args等函数, 但在w3schol.com.cn上面没有, 所有猜测可能有兼容性问题.
于是又查到php5.3的改动之一: "•函数内 include 或者 require 一个文件时,文件内 将不能使用 func_get_arg(), func_get_args() 和 func_num_args() 函数".
那么, 问题就是php5.3版本以后要实现变长参数应该怎么写呢, 或者说如果写才最兼容, 还有就是目前使用网上买的虚拟主机上装的php都是什么版本的

PHP与MySQL程序设计3
PHP与MySQL程序设计3

本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。 本书内容全面深入,适合各层次PHP和MySQL开发人员阅读,既是优秀的学习教程,也可用作参考手册。

PHP与MySQL程序设计3 253
查看详情 PHP与MySQL程序设计3


回复讨论(解决方案)

printf("php %s\n", phpversion());function f() {  printf("参数个数: %d  参数值: %s\n", func_num_args(), join(', ', func_get_args()));}f(1,2,3);f('a','b','c','d');
登录后复制
php 5.4.31参数个数: 3  参数值: 1, 2, 3参数个数: 4  参数值: a, b, c, d
登录后复制
php 5.6.3参数个数: 3  参数值: 1, 2, 3参数个数: 4  参数值: a, b, c, d
登录后复制

可见,实践是检验真理的唯一标准

出错的情况是这样子的

test.php<?phpfunction foo() {    include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?php$args = func_get_args();var_export($args);?>
登录后复制

这个东西
function foo() {
    include './fga.inc';
}
这种写法,楼主在什么样的情境下会这么写?
要兼容,至少这样子
test.php<?phpfunction foo() {    $args = func_get_args();    include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?phpvar_export($args);?>
登录后复制


我还没测试,楼主你先试试

至于虚拟机,应该大多数是5.2.x和5.3.x

我试完了 第一个报错,第二个正常

printf("php %s\n", phpversion());function f() {  printf("参数个数: %d  参数值: %s\n", func_num_args(), join(', ', func_get_args()));}f(1,2,3);f('a','b','c','d');
登录后复制
php 5.4.31参数个数: 3  参数值: 1, 2, 3参数个数: 4  参数值: a, b, c, d
登录后复制
php 5.6.3参数个数: 3  参数值: 1, 2, 3参数个数: 4  参数值: a, b, c, d
登录后复制

可见,实践是检验真理的唯一标准


您的代码中没有包含其他文件, 当然不会出错了.
另外实践也需要环境, 至少要有一个5.2以下的环境, 一个5.2以上的环境才行, 我连自己用的php是哪个版本都不知道(当然看了您的代码我现在知道了)

你的那个写法本来就是违背模块化原则的
再说 php5.2 早就因为有严重的安全问题而废止了
如果你非要去用,那也只是你个人的问题

我的是5.3.8,测试Warning: func_get_args(): Called from the global scope - no function context in E:\www\phptest\fga.inc on line 3

出错的情况是这样子的

test.php<?phpfunction foo() {    include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?php$args = func_get_args();var_export($args);?>
登录后复制

这个东西
function foo() {
    include './fga.inc';
}
这种写法,楼主在什么样的情境下会这么写?
要兼容,至少这样子
test.php<?phpfunction foo() {    $args = func_get_args();    include './fga.inc';}foo('First arg', 'Second arg');?>fga.inc<?phpvar_export($args);?>
登录后复制


我还没测试,楼主你先试试

至于虚拟机,应该大多数是5.2.x和5.3.x


运行 您的两个代码, 我懂 了, 我查到的那句话
"•函数内 include 或者 require 一个文件时,文件内 将不能使用 func_get_arg(), func_get_args() 和 func_num_args() 函数".
原来"文件内"指的是被包含的那个文件. 这样的代码我肯定不会写, 我只是会包含一些类或函数的文件, 不会包含全局变量.

谢谢大家, 我懂了, 是我自己理解错了那句话.

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号