当前位置:  开发笔记 > 编程语言 > 正文

PHP是否在定义函数时评估变量?

如何解决《PHP是否在定义函数时评估变量?》经验,为你挑选了1个好方法。

我正在使用会话在PHP中创建多页表单.该$stage变量跟踪用户填写表单的进度(UPDATE),通常在表单的每个阶段设置为$ _POST.

在第二页(第2阶段),表单的提交按钮获取其值如下:

echo ';

这工作正常 - $stage + 1如果我在第2页,则评估为3.但由于我不止一次这样做,我决定将此代码拉出到我在代码顶部定义的函数中,之后$stage提到.

在我以前使用上面代码的同一个地方,我调用了该函数.我已经验证函数的代码是相同的,但现在$stage + 1评估为1.

PHP是在定义函数时评估我的变量,而不是在调用它时?如果是这样,我该如何防止这种情况?

更新1

为了测试这个理论,我$stage = 2在定义我的函数之前设置,但是当我调用函数时它仍然计算为1.这是怎么回事?

问题解决了

感谢所有建议变量范围成为罪魁祸首的人 - 我现在打了我的额头.$stage是一个全局变量,我没有$GLOBAL_stage像我通常那样称它来防止这种问题.

我添加global $stage;到函数定义,它工作正常.谢谢!



1> cg...:

不,PHP会在调用函数时评估您的变量.但是你的函数有一个局部变量范围,即没有看到你的函数,我猜你是在运行一个局部变量.您可以将全局变量导入到您的函数中,但不建议这样做:

function myfunction() {
    global $stage;
    ...
}

如果不知道你的代码,真的很难说,但我会继续猜测你正在使用'register globals'将表单参数注入全局PHP变量(在这种情况下为$ state).您可能需要考虑关闭register_globals,因为它确实存在安全风险并使用所谓的超全局变量.


编辑

好的,所以你在$ _POST数组中看到了你的舞台.仍然疯狂地猜测你的功能,你可以尝试以下方法:

function my_insert_stage_param() {
    global $stage;
    echo '';
}

像$ _POST数组这样的Suberglobals不需要声明global.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有