• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-23) 12次浏览 已收录 0个评论
文章目录[隐藏]

我想写一个变长参数的函数, 上网查询后找到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都是什么版本的

回复讨论(解决方案)

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

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

您的代码中没有包含其他文件, 当然不会出错了.
另外实践也需要本文来源gaodai#ma#com搞@@代~&码*网/搞gaodaima代码环境, 至少要有一个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() 函数”.
原来”文件内”指的是被包含的那个文件. 这样的代码我肯定不会写, 我只是会包含一些类或函数的文件, 不会包含全局变量.

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php中变长参数在5.3以后如何实现

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址