我表格中的一个字段是 你有工作机会吗?
我已使用此代码
将发布数据编辑成数组$ form_dataif (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];
使用问号会破坏脚本。什么是正确的语法?
答案 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
)