質問

PHPのHEREDOC string宣言によって出力するためのブロックのhtml.ついての解析では変数だけでprefixingし$は複雑な構文(い$var[2][3])を入れて表現内で{}ブレース.

PHP5で では実際に機能通話内で{}ブレース内のHEREDOC文字列が、くしてビットを作ります。機能の名前自体に格納する変数として呼ばれるようで動的に名前の機能です。例えば:

$fn = 'testfunction';
function testfunction() { return 'ok'; }
$string = <<< heredoc
plain text and now a function: {$fn()}
heredoc;

ご覧のとおり、これは少汚ん:

$string = <<< heredoc
plain text and now a function: {testfunction()}
heredoc;

いつものコード例では、などにてお買い求めいただくことができるHEREDOC電話の機能または反転を行うようなもの:

?>
<!-- directly output html and only breaking into php for the function -->
plain text and now a function: <?PHP print testfunction(); ?>

後者のように出力を直接入出力ストリームな私が使っている出力バッファリング)ができないんです。

なので、その質問:ああこれまでにないアプローチす。

編集に基づく応答: それは確かなようにテンプレートエンジンが自分の生活がより簡単になりますが、これらの要求基本的に反転私の通常のPHPスタイル。せることになる悪いことで説明した慣性..私ための方法を考える科がんにテンプレートです。

役に立ちましたか?

解決

私は使用しないでHEREDOCですべてのことはできます。それだけではないので、良い"テンプレートビル"。すべてのHTMLッダ文字列が複数のデメリット

  • オプションのためのWYSIWYG
  • バーコードの完成のためのHTMLからのIde
  • 出力(HTML)をロックされるロジックのファイル
  • すると、利用hacksものを好きなようにしようとしていることって今を達成するための複雑な孔などのループを

は、基礎的なテンプレートエンジンを使えばPHPとを含んでなぜ言語の <?php?> 区切り文字.

template_file.php

<html>
<head>
  <title><?php echo $page_title; ?></title>
</head>
<body>
  <?php echo getPageContent(); ?>
</body>

index.php

<?php

$page_title = "This is a simple demo";

function getPageContent() {
    return '<p>Hello World!</p>';
}

include('template_file.php');

他のヒント

なので、しばらく日本にいたいことが少し簡単なので、複数のクラスを使用でき

function fn($data) {
  return $data;
}
$fn = 'fn';

$my_string = <<<EOT
Number of seconds since the Unix Epoch: {$fn(time())}
EOT;

私は次のように処理されます:

$string = <<< heredoc
plain text and now a function: %s
heredoc;
$string = sprintf($string, testfunction());

だんでき優雅な...

うとしてグローバル変数、またはインスタンス化の際に必要なす):

<?php
  class Fn {
    public function __call($name, $args) {
      if (function_exists($name)) {
        return call_user_func_array($name, $args);
      }
    }
  }

  $fn = new Fn();
?>

現在他の関数呼び出しを通 $fn インスタンス.う既存の機能 testfunction() できるという、heredocと {$fn->testfunction()}

基本的にして包装すべての機能をクラスのインスタンスは、PHPの __call magic 方法はクラスメソッドの実際の機能を必要とする呼び出されます。

いてはちょっとした空間のなかで、私はランダムにたどのように行われていますか?の将来の読者からのメッセージのような:

私だけ利用出力バッファです。なので基本的には開発プロジェクトのバッファリングを使用ob_start(しお"テンプレートファイルと機能の変数等内部ので、内容をバッファに書き込もうとし、文字列としてのバッファです。そんなを用いる変数が必要となりますので、皆さんが他の機能は、まだ、HTMLの構文強調表示可能なバーコードを作成。

こちらはん:

テンプレートファイル:

<?php echo "plain text and now a function: " . testfunction(); ?>

スクリプト:

<?php
ob_start();
include "template_file.php";
$output_string = ob_get_contents();
ob_end_clean();
echo $output_string;
?>

そのスクリプトが含まれtemplate_file.php そのバッファ、他の機能方法の割合の変数を設立。見つかればその記録をバッファの内容を変数といいます。

そのようにしたいという場合などへのエコーでは、ページまさにその第継続してご利用いただけます。でループを増やしていき、文字列の前に出力します。

それでいいんじゃないの道のりをしたいという場合などに使孔のエンジンです。

のための完全にお使いいただけます !${''} 黒マジック パーサにハッキング:

echo <<<EOT
One month ago was ${!${''} = date('Y-m-d H:i:s', strtotime('-1 month'))}.
EOT;

このスニペットを定義する変数の名前で指定された機能内userscopeと結合している文字列を含んです。いんでいる。

function add ($int) { return $int + 1; }
$f=get_defined_functions();foreach($f[user]as$v){$$v=$v;}

$string = <<< heredoc
plain text and now a function: {$add(1)}
heredoc;

ます。

と思いをheredocが発生HTMLのコードです。例えばを見せていただいたのですが、以下のとほぼ完全に解読不能に.

<html>
<head>
  <title><?php echo $page_title; ?></title>
</head>
<body>
  <?php echo getPageContent(); ?>
</body>

しかし、達成のためのシンプルになれることだから、これからの評価機能する前に開始されます。せていただけるような悲惨な制約が、いまを切り離計算からディスプレイには、通常は良い方法がありました。

と思い、以下のものが読む:

$page_content = getPageContent();

print <<<END
<html>
<head>
  <title>$page_title</title>
</head>
<body>
$page_content
</body>
END;

残念ながら、ものすご提案いたご質問へのバインドする機能を変数にを加え、複雑さのレベルのコードは、プライベートビーチがあり、以下のコードは、読みやそれに類するものに限定される利heredoc.

た素敵なソー包装機。 http://blog.nazdrave.net/?p=626

function heredoc($param) {
    // just return whatever has been passed to us
    return $param;
}

$heredoc = 'heredoc';

$string = <<<HEREDOC
\$heredoc is now a generic function that can be used in all sorts of ways:
Output the result of a function: {$heredoc(date('r'))}
Output the value of a constant: {$heredoc(__FILE__)}
Static methods work just as well: {$heredoc(MyClass::getSomething())}
2 + 2 equals {$heredoc(2+2)}
HEREDOC;

// The same works not only with HEREDOC strings,
// but with double-quoted strings as well:
$string = "{$heredoc(2+2)}";

いち Smarty としてのテンプレートエンジンいたその他のものを自分で行います。

たい場合にこだわる現在のアプローチ sans テンプレートは、何も悪いつ出力バッファリング?こだくより柔軟によることを宣言する変数は、スティングの名前に機能したい金がかかる場合があります。

少し遅いがみたいです。ことが可能でheredoc!

ては、phpマニュアル部門"(巻き)構文"

ここでは、例えば、利用@CJDennisの提案:

function double($i)
{ return $i*2; }

function triple($i)
{ return $i*3;}

$tab = 'double';
echo "{$tab(5)} is $tab 5<br>";

$tab = 'triple';
echo "{$tab(5)} is $tab 5<br>";

例えば、良い使用のためのHEREDOCの構文は巨形式のデータソースとなる文書リストの改善に取り組んでいます。●利用することができHEREDOC機能の内部に制御を追加する接尾辞の後、各分野の名前です。この典型的なサーバー側での作業です。

お忘れlambda機能:

$or=function($c,$t,$f){return$c?$t:$f;};
echo <<<TRUEFALSE
    The best color ever is {$or(rand(0,1),'green','black')}
TRUEFALSE;

またその機能を利用すcreate_function

んあることに注意しなければうとともに、ダブル-引用文字列です。

http://www.php.net/manual/en/language.types.string.php

興味深い先端ます。

<div><?=<<<heredoc
Use heredoc and functions in ONE statement.
Show lower case ABC="
heredoc
. strtolower('ABC') . <<<heredoc
".  And that is it!
heredoc
?></div>
<?php
echo <<<ETO
<h1>Hellow ETO</h1>
ETO;

実際に試したほうがよいでしょう。後に江藤;コマンドのすべて入力します。-

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top