![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります
ダブルクォーテーションで囲っても
「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ベストアンサー
- 回答日時:
かなり無理矢理ですが、
自分自身のファイルを読むという方法はいかがでしょう。
─
<?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__ を使って
目的の行を指示します。
対象のコードが複数行になる場合には、
もう少し複雑な処理が必要になります。
ky072様
ご回答ありがとうございます!
この、自分自身にアクセスするというのが
僕、個人的に目からウロコです
こんなこと出来るんですね!!
No.2
- 回答日時:
無理だと思います。
abc($c = $a['huga'] * $b['hoge'] );
の実行順序としては括弧の中の処理が優先されて行われますので、
$c = $a['huga'] * $b['hoge'];
abc($c);
と等しいことになります。
括弧の中を処理させないためには、括弧の中身を予め文字列にしておく必要がありますが、そうすると質問者さんの希望する式自体には手を入れないという条件を満たさなくなってしまいます。
No.1
- 回答日時:
ご提示のfunction abc($str){・・・的な処理は無理がありますね
たんにエスケープしたくないというだけならこんな感じ
<?PHP
$a['huga'] = 2;
$b['hoge'] = 3;
$str=<<<'eof'
$c = $a['huga'] * $b["hoge"] ;
eof;
print $str;
eval($str);
print $c;
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- JavaScript javascriptで文字分割は、 split() などメソッド不要??? 4 2023/02/06 22:50
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) Excel VBAでAA(BBB) → BBB.AA に置換したい 2 2022/10/30 13:59
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETからVBAマクロ(引数)を呼...
-
ExcelVBAで部分一致(*)をしたい
-
VBA コレクションに2次元配列...
-
PHP コードを文字列として出力...
-
「取得先」という表現について
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
【C#】DataGridViewの最大列数...
-
phpでcookieがうまく保存されない
-
小数点以下0の非表示
-
ブラウザを閉じた後もセッショ...
-
format関数について
-
Excel VBA:特定の文字列以降(...
-
ミュージックのアートワークを...
-
バッチファイルでpingの結果を...
-
1ヶ月後の日付を出力したい
-
WordでExcelデータを差込...
-
ログイン画面をはさんだ後、自...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
classの再定義エラーについて
-
VB6のコンボボックスのテキスト...
-
可変変数にアロー演算子を使いたい
-
PHPでの画像の形式の変換
-
VB.NETSystem.Xml 要素数を得る...
-
protectedなのにアクセスできな...
-
issetで変数の存在をチェックし...
-
vb作成したらでbeep音が鳴りま...
-
どういうプログラムを関数化を...
-
PHPの名前空間インポートについて
-
エラーの理由が分りません。Pri...
-
関数から関数を呼び出したとき...
-
PHP、ヒアドキュメント内でのIF...
-
protectedなのにアクセスできな...
-
PHPの変数値をリンクさせたい
-
関数の動きと記述方法の意味を...
-
htmlで変数の表示
-
アロー演算子について
おすすめ情報