- ベストアンサー
PHPコードを文字列として出力する方法
- PHPのコードを文字列として出力する方法について知りたいです。ダブルクォーテーションや関数などを使用せずに、直接文字列として出力する方法を教えてください。
- ダブルクォーテーションや関数を使用せずに、PHPコードを文字列として出力する方法を教えてください。連想配列のキーの囲み文字はシングルクォーテーションです。
- PHPのコードを文字列として出力する方法について教えてください。ダブルクォーテーションや関数を使用せずに実現する方法を知りたいです。連想配列のキーの囲み文字はシングルクォーテーションです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
かなり無理矢理ですが、 自分自身のファイルを読むという方法はいかがでしょう。 ─ <?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__ を使って 目的の行を指示します。 対象のコードが複数行になる場合には、 もう少し複雑な処理が必要になります。
その他の回答 (2)
- t_ohta
- ベストアンサー率38% (5238/13705)
無理だと思います。 abc($c = $a['huga'] * $b['hoge'] ); の実行順序としては括弧の中の処理が優先されて行われますので、 $c = $a['huga'] * $b['hoge']; abc($c); と等しいことになります。 括弧の中を処理させないためには、括弧の中身を予め文字列にしておく必要がありますが、そうすると質問者さんの希望する式自体には手を入れないという条件を満たさなくなってしまいます。
お礼
t_ohta様 ご回答ありがとうございます! やはり無理ですか、便利なPHPなので もしかしたらと思いましたが
- yambejp
- ベストアンサー率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; ?>
お礼
yambejp様 ご回答ありがとうございます! やはり無理なんですね サンプルソースありがとうございます!
お礼
ky072様 ご回答ありがとうございます! この、自分自身にアクセスするというのが 僕、個人的に目からウロコです こんなこと出来るんですね!!