• ベストアンサー

ヒアドキュメントの中で関数の実行

ヒアドキュメントの中での関数の実行は可能でしょうか? だめだった例) <?php $a = 1 $b = 2 print <<<EOF {$a} と {$b} で大きいのは {max($a,$b)}です。 EOF; 変数は変換して出力してくれますが、関数でも実行するほうほうはあるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.3

http://oshiete1.goo.ne.jp/qa1851595.html 失礼しました。Perlの例でした。 PHPでは無理っぽいです。

guttten
質問者

お礼

むりっぽいですか~・・・ やっぱりあらかじめ変数に入れるしかないですかね~^^;

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

eval()を使うのでちょっと危険ですが、信頼できるデータを元にしている のであれば@{}をまねて、以下のようなやり方はいかがでしょうか? <?php $a = 3; $b = 4; $str= <<<EOF {$a} と {$b} で大きいのは @[max($a,$b)]です。<br> 和は@[$a+$b]です。<br> 積は@[$a*$b]です。 EOF; $pattern="/@\[(.*?)\]/"; preg_match_all($pattern,$str,$matches); $array = array_map( create_function('$arg', 'return eval("return ".$arg.";");'), $matches[1] ); $str=str_replace($matches[0],$array,$str); print $str; ?>

すると、全ての回答が全文表示されます。
  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.4

ヒアドキュメント内で関数が使えるかどうかが重要ということでしょうか。たとえば、if文などで代用する場合です。 <?php $a = 1; $b = 2; if($a > $b){ print <<<EOF 大きいのは{$a}です。 EOF; } elseif($a < $b){ print <<<EOF 大きいのは{$b}です。 EOF; } elseif($a = $b){ print <<<EOF 同じです。 EOF; } else{ print <<<EOF わかりません。 EOF; } ?>

guttten
質問者

お礼

実際にはDBから取得したレコードを出力するというものなのですが print '<h1>SQLの実行結果</h1>'; foreach($dataset as $record){ print<<<EOF <h2>{$record[1]}</h2> <h2>{$record[2]}</h2> <h2>{$record[3]}</h2> <h2>{$record[4]}</h2> <hr> EOF; } このうち$record[4]だけをnl2br($record[4])で出力したいのです。 なので、あくまでもヒアドキュメント内で関数実行ができればというのが目的です。。 たくさんコードを記述していただきありがとうございます♪

すると、全ての回答が全文表示されます。
noname#77845
noname#77845
回答No.2

単純に、 <?php $a = 1; $b = 2; $c = max($a, $b); print <<<EOF {$a} と {$b} で大きいのは {$c}です。 EOF; ?> じゃだめ?

guttten
質問者

お礼

それでももちろんいいのですが、実際は配列を順々に記述していく中で、1つ2つが関数で編集した値を出力したいので、できれば変数を使わずヒアドキュメント内で使えればなあと思っています。。。

すると、全ての回答が全文表示されます。
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

http://tech.bayashi.jp/archives/entry/perl/2008/002110.html @{[関数]} で実行できます。そのままでは無理です。

guttten
質問者

お礼

まさにこれがPHPでできたら、、という機能なんですが・・・。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A