我正在阅读一些WordPress插件代码,原谅我的法语,尽管我已经编写了很多东西,从C到JavaScript,包括PHP,但我不确定通过以下方式实现了什么样的逻辑:
<?php
function dcontact_options_page() {
if($_GET['action'] == 'edit_group') {
dcontact_action_edit_group();
return;
}
elseif($_GET['action'] == 'edit_form') {
dcontact_action_form_settings();
return;
}
elseif(isset($_POST['set_order'])) {
$result = dcontact_action_set_order();
}
else if(isset($_POST['new_group'])) {
$result = dcontact_action_new_group();
}
else if($_GET['action'] == 'delete_group') {
$result = dcontact_action_delete_group();
}
if(!isset($result['message']) && isset($_GET['message'])) $result['message'] = urldecode($_GET['message'])
?>
<div class="wrap">
<div class="icon32" id="icon-options-general"><br></div>
<!-- More HTML AND PHP code blocks -->
<!-- And then suddenly... -->
<?php
} /// What's this? End of function definition? PHP chokes on this with syntax error.
///...
?>
我混淆PHP和逐字输出并不陌生,而且我在说if
语句中也输入和退出PHP块的公平份额,但这是最重要的。任何人都可以解释这个家伙想要完成的事情吗?代码是否意味着如果if
条件评估为true
则会写出大量标记(并执行更多PHP),但函数定义结束,突然?也许它的功能是什么?我的意思是,我会使用HEREDOC
语法来提高可读性。
总而言之,我的命令行PHP 5.4.7预处理程序在最后}
上扼流圈。我不能说我责备它。在一段时间内没有看到像这样的意大利面条代码。
答案 0 :(得分:2)
这部分:
if(!isset($result['message']) && isset($_GET['message'])) $result['message'] = urldecode($_GET['message'])
最后缺少一个分号。如果原作者使用适当的支持单语句条件,那就更清楚了,例如:
if(!isset($result['message']) && isset($_GET['message'])) {
$result['message'] = urldecode($_GET['message'])
}
这会将错误位置放在违规行下方一行:)
答案 1 :(得分:0)
第一个结束PHP标记之前的if语句是一种简写形式。
if(!isset($result['message']) && isset($_GET['message'])) $result['message'] = urldecode($_GET['message'])
可以更清楚地写成:
if (!isset($result['message']) && isset($_GET['message'])) {
$result['message'] = urldecode($_GET['message']);
}
此外,if语句后面也应该加一个分号,但后面跟着一个结束的PHP标签,并不是严格要求的。