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

php で C言語のdefineマクロのようなものありますか

echo nl2br(str_replace($old_str,$new_str,htmlspecialchars($row['specA'],ENT_QUOTES)));
  :
echo nl2br(str_replace($old_str,$new_str,htmlspecialchars($row['specB'],ENT_QUOTES)));
  :
echo nl2br(str_replace($old_str,$new_str,htmlspecialchars($row['specC'],ENT_QUOTES)));

のような部分が多数あり、長い部分を別関数を用意せずに、簡潔に記載したいです。

C言語であれば、

#define echoX(STR) nl2br(str_replace($old_str,$new_str,htmlspecialchars($row['STR'],ENT_QUOTES)))

で定形処理部を define文で定義しておいて、変更部分だけを与えて

 echoX(specA);

 echoX(specB);
 echoX(specC);

のように簡潔に記載できますが、同じようなことはPHPでは出来ないのでしょうか?

もちろん、
 $old_str = array('<sup>','</sup>','<br>');
 $new_str = array('<sup>','</sup>','<br>');
は予め別のところで定義はしています。

A 回答 (2件)

C言語の #define→プログラムを書き換える


ということからすると、同等なのは
eval
https://www.php.net/manual/ja/function.eval.php
でしょう。
ただ「禁断の術」なので、お勧めできません。


関数を作るのが、やはりいいかと思います。

関数名を増やしたくない、ということなら、 無名関数を使うのがいいでしょう。
https://www.php.net/manual/ja/functions.anonymou …
    • good
    • 0
この回答へのお礼

回答ありがとうございます
eval ですか、こりゃ大事になりますね。
やりたいのは、
 プログラムは変えずに見た目だけを変える
ことです。

気持ちとしては、
 関数を作るほどではないが、複数回、同じことを書くのは偲びない
ので、文字列変換(プリプロセッサ、#define) で対応できないかしら
というものです。

PHPでは、C言語のような簡略記法が用意されていないなら諦めるしか無いですね。
そもそも、インタプリター系では無理なのでしょうかね。

お礼日時:2020/05/03 10:41

うーん、phpはあまり使っていませんが、C言語にあるようなdefineは見たことありません。


php言語の祖先はperlですが、perlにはそういう構文は無いですからね。

ちなみにC#にも、defineに相当するような構文は無いみたいです。
その代わりに、もっと強力な「属性」ってのがあります。
C、C#はコンパイラー系の言語です。
(C#では、インタプリター機能も追加されましたけどね)

perl、phpといったインタプリター系では、ちょっと難しいのでは?
    • good
    • 0
この回答へのお礼

回答ありがとうございます
無いんですね、残念

お礼日時:2020/05/03 10:28

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