以下PHP代码做了什么(它混合了PHP和输出)?

时间:2012-09-25 10:00:40

标签: php

我正在阅读一些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预处理程序在最后}上扼流圈。我不能说我责备它。在一段时间内没有看到像这样的意大利面条代码。

2 个答案:

答案 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标签,并不是严格要求的。