0

私はいくつかの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.

    ///...

?>

if私はPHPと逐語的な出力を混合することに不思議ではありません。また、sayステートメントの途中でPHPブロックに出入りすることもかなりの割合で行いましたが、これがそれを上回っています。男が達成しようとしていたことを誰かが説明できますか?コードは、if条件が評価された場合、true大量のマークアップが書き​​出される(そしてさらに多くのPHPが実行される)、関数定義が突然終了することを意味しますか?多分それは関数が何をするのか?HEREDOCつまり、読みやすさのために構文を使用したでしょう。

要約すると、私のコマンドラインPHP5.4.7プリプロセッサは最後にチョークし}ます。そして、私はそれを非難するとは言えません。このようなスパゲッティコードは、しばらくの間見たことがありません。

4

2 に答える 2

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行下になります:)

于 2012-09-25T10:04:04.627 に答える
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の終了タグが続くため、厳密には必須ではありません。

于 2012-09-25T10:10:23.333 に答える