• ベストアンサー
  • すぐに回答を!

PHP コードを文字列として出力する方法

  • 質問No.7480960
  • 閲覧数214
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 86% (181/210)

お世話になります

ダブルクォーテーションで囲っても
「PHP コード」を「文字列」として出力する方法
つまり、evalの逆の関数のようなものはありますでしょうか

$a['huga'] = 2;
$b['hoge'] = 3;

//式
$c = $a['huga'] * $b['hoge'] ;

abc($c = $a['huga'] * $b['hoge'] );

function abc($str){

//ここでなんちゃらほんちゃら
//もしくはfunctionの外側でなんちゃらもでも可

echo $str;

}

期待する出力結果
$c = $a['huga'] * $b['hoge'] ;

実際の結果
6

$の前に¥を入れてダブルクォーテーションで囲めば、
または、シングルクォーテーションの前に¥を入れてシングルクォーテーションで囲めば
文字列になるのはわかりますが
式の文字列には直接、手を加えず関数等で実現するやり方が知りたいです

※連想配列のキーの囲み文字はシングルクォーテーションです、ダブルに出来ない条件でお願いします。


お忙しい中恐縮ですが熟練者の方でわかる方がいましたら
お教え下さいませ

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

  • 回答No.3
  • ベストアンサー

ベストアンサー率 60% (85/140)

かなり無理矢理ですが、
自分自身のファイルを読むという方法はいかがでしょう。


<?php
$a['huga'] = 2;
$b['hoge'] = 3;

$c = $a['huga'] * $b['hoge'];

$str = abc(__LINE__);
echo $str . "\n";

function abc($ln){
 $file = fopen(__FILE__, 'r');
 $str = '';
 for($n=1; !feof($file) && $n<$ln; $n++){
  $line = trim(fgets($file));
  if( 0 < strlen($line) ){ $str = $line; }
 }
 fclose($file);
 return $str;
}
?>


abc() は自分自身のファイルを読み、
引数で指定した行番号の直前の行を表示します。
呼び出す際、現在の行番号 __LINE__ を使って
目的の行を指示します。

対象のコードが複数行になる場合には、
もう少し複雑な処理が必要になります。
お礼コメント
susan-styl

お礼率 86% (181/210)

ky072様

ご回答ありがとうございます!

この、自分自身にアクセスするというのが
僕、個人的に目からウロコです
こんなこと出来るんですね!!
投稿日時:2012/05/20 15:29

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 38% (3300/8631)

他カテゴリのカテゴリマスター
無理だと思います。
 abc($c = $a['huga'] * $b['hoge'] );
の実行順序としては括弧の中の処理が優先されて行われますので、
 $c = $a['huga'] * $b['hoge'];
 abc($c);
と等しいことになります。
括弧の中を処理させないためには、括弧の中身を予め文字列にしておく必要がありますが、そうすると質問者さんの希望する式自体には手を入れないという条件を満たさなくなってしまいます。
お礼コメント
susan-styl

お礼率 86% (181/210)

t_ohta様

ご回答ありがとうございます!
やはり無理ですか、便利なPHPなので
もしかしたらと思いましたが
投稿日時:2012/05/20 15:24
  • 回答No.1

ベストアンサー率 51% (3827/7415)

ご提示のfunction abc($str){・・・的な処理は無理がありますね

たんにエスケープしたくないというだけならこんな感じ
<?PHP
$a['huga'] = 2;
$b['hoge'] = 3;

$str=<<<'eof'
$c = $a['huga'] * $b["hoge"] ;
eof;
print $str;
eval($str);
print $c;
?>
お礼コメント
susan-styl

お礼率 86% (181/210)

yambejp様

ご回答ありがとうございます!
やはり無理なんですね

サンプルソースありがとうございます!
投稿日時:2012/05/20 15:25
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ