17

私はここ数年PHPを使用して開発してきましたが、最近このコードに出くわしました。

<?php
    echo <<<EOB
        <html>
        <head>
            <title>My title</title>
        </head>
        ...
    EOB;
?>

HTMLを印刷するこのアプローチは見たことがありません。これは非常に便利で、奇妙な変数や二重引用符の構文エラーが発生しにくいようです。

私はこれに関するいくつかの公式情報を検索しましたが、これについて話しているRasmusの投稿だけが見つかりました。

この機能の詳細な説明とEOBの意味は何ですか?たぶんブロックの終わり


ActionFilterを使用してcontroller.actionパラメーターを設定しますが、ビューのActionLinkでパラメーター要求を設定します

[UserNameFilter] ActionFilterAtrributeがあり、コントローラーアクションのユーザー名パラメーターを設定します。これはうまく機能します。ただし、コントローラーに文字列で入力されたHtml.ActionLinkヘルパーを使用すると、コンパイラーはビューで上記のユーザー名パラメーターを要求します。

誰かがこれに出くわし、暗唱する方法を知っていますか?

コントローラのアクション:

[UserNameFilter]
public ActionResult Category(int categoryId, int page, string userName)

ビュー内のコード:

<%= Html.RenderTree(ViewData.Model, i => Html.ActionLink<ProductController>(pc =>
    pc.Category(i.CategoryId, 1, **Complier error here**),i.CategoryName)) %>
4

5 に答える 5

30

これはヒアドキュメント構文として知られています。ドキュメントには、知っておく必要のあるすべての情報が記載されています。

ただし、基本的には次のようになります。

文字列を区切る3番目の方法は、ヒアドキュメント構文です:<<<。この演算子の後に、識別子が提供され、次に改行が提供されます。文字列自体が続き、次に同じ識別子が続き、引用を閉じます。

終了IDは、行の最初の列から開始する必要があります。また、識別子はPHPの他のラベルと同じ命名規則に従う必要があります。英数字とアンダースコアのみが含まれ、数字以外の文字またはアンダースコアで始まる必要があります。

つまりEOB、作成者が区切り文字として選択したものであり、彼の場合にそれが何を表すのかはよくわかりませんが、識別子は任意のものにすることができます。

于 2009-06-26T10:54:07.770 に答える
6

完全を期すために、PHPのヒアドキュメントはPerlから継承され、Perl自体はBourneシェルから継承されています。

于 2009-06-26T11:00:32.343 に答える
3

これはヒアドキュメントと呼ばれ、マニュアルで説明されています。

于 2009-06-26T10:55:38.423 に答える
2

正式な用語は「ヒアドキュメント」だと思いますが、通常は「ヒアドキュメント」に短縮されます。

于 2009-08-21T12:51:08.703 に答える