重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

ヒアドキュメントの中での関数の実行は可能でしょうか?

だめだった例)
<?php
$a = 1
$b = 2
print <<<EOF
{$a} と {$b} で大きいのは {max($a,$b)}です。
EOF;

変数は変換して出力してくれますが、関数でも実行するほうほうはあるでしょうか?

A 回答 (5件)

http://oshiete1.goo.ne.jp/qa1851595.html

失礼しました。Perlの例でした。

PHPでは無理っぽいです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/29 19:33

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;
?>
    • good
    • 0

ヒアドキュメント内で関数が使えるかどうかが重要ということでしょうか。

たとえば、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;
}
?>
    • good
    • 0
この回答へのお礼

実際には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])で出力したいのです。
なので、あくまでもヒアドキュメント内で関数実行ができればというのが目的です。。

たくさんコードを記述していただきありがとうございます♪

お礼日時:2008/04/29 19:56

単純に、


<?php
$a = 1;
$b = 2;
$c = max($a, $b);
print <<<EOF
{$a} と {$b} で大きいのは {$c}です。
EOF;
?>
じゃだめ?
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/29 19:31

http://tech.bayashi.jp/archives/entry/perl/2008/ …

@{[関数]}
で実行できます。そのままでは無理です。
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2008/04/29 19:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!