如何定义$ _POST变量,其中字段名称包含问号?

时间:2011-06-29 01:37:23

标签: php

我表格中的一个字段是 你有工作机会吗?

我已使用此代码

将发布数据编辑成数组$ form_data
if (get_magic_quotes_gpc()) {
  $unescaped_post_data = stripslashes_deep($_POST);
} else {
  $unescaped_post_data = $_POST;
}
$form_data = json_decode($unescaped_post_data['data_json']);

但是如果我尝试设置变量

$job_offer = $form_data->do_you_have_a_job_offer?[0];

使用问号会破坏脚本。什么是正确的语法?

3 个答案:

答案 0 :(得分:4)

作为@Ivan demonstrated,您可以在不放弃问号的情况下访问该值。话虽这么说,仅仅是因为你可以做某事并不意味着你应该

从长远来看,为了您自己的理智,解决方案是遵守有效的命名约定。根据文件:

  

变量名遵循与PHP中其他标签相同的规则。有效的变量名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。

在标签中使用问号可能会让您自己或其他人在以后的路上感到困惑。毕竟,问号在PHP中保留为运算符,如下面的三元组所示:

$foo = $bar? 0 : 1 ;

在标签中避免使用它肯定会给你的生活增添许多年,特别是如果雇用精神病性的斧头谋杀者来维持你的代码;)

答案 1 :(得分:2)

只需使用护腕:

$form_data->{'do_you_have_a_job_offer?'}

来自manual page

  

通过将元素名称封装在大括号和撇号中,可以访问包含PHP命名约定下不允许的字符的对象中的元素(例如连字符)。

此解决方案有效。但您应该考虑重构代码以使用标准名称约定重命名变量(请参阅this answer)。这不会立即给出结果,但会减少您(或您的继任者)花在调试此代码上的时间。

答案 2 :(得分:0)

虽然我认为这不是一个好主意,但Ivan Nevostruev是正确的。由于他在我将测试用例放在一起时回答,所以下面会有效:

<?php

class test {
    function set($key, $val) {
        $this->$key = $val;
    }
}

$form_data = new test;
$form_data->set('do_you_have_a_job_offer?',array('test'));

print_r($form_data->{"do_you_have_a_job_offer?"});

?>

输出:

Array
(
    [0] => test
)

http://codepad.org/l62mGQ8Q