- ベストアンサー
【PHP】define() て便利なようで不便…
PHP5ユーザーです。 定数定義のdefine() というのを最近知りました。 一見便利な気がしたのですが、変数とは勝手が違うため不便に感じることがあります。 例えば、 $useEnc = 'EUC-JP'; header('Content-Type: text/html; charset={$useEnc}'); 上記をdefine()で書き直そうとすると代入できません。 また、ヒアドキュメンント内で定数を代入しようとしてもできません。 プロの方はこういうのをどのように扱っているのでしょう。 お詳しい方、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
文字列連結の方法ってしってます? $string = 'aiueo'.'kakikukeko'; これで、 echo $string; で aiueokakikukeko が代入されていることが分かります。 これと同じ要領 define('CONSTANT', 'EUC-JP'); header('Content-Type: text/html; charset='.CONSTANT); これだけ。 {$useEnc} でつっこむよりも、 . で連結したほうが、微妙に処理が速いです。
その他の回答 (2)
- ggaogg
- ベストアンサー率43% (38/88)
メソッドの引数が省略された時にデフォルト値として代入する時にdefineで定義した値かconstで定義した値しか代入できないと思います。 define ('defaultValue', '初期値'); class Sample { function myMethod($a = defaultValue) { echo $a; } const defaultValue2 = '初期値2'; function myMethod2($b = self::defaultValue2) { echo $b; } } 次のはエラーになるんじゃないですっけ class Sample { var $defaultValue = '初期値'; function myMethod($a = $this->defaultValue) { echo $a; } } ごめんなさいテストしないで投稿してます。
補足
研究してみます。 ありがとうございました。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
#1さんの回答で出来ますね。 違う話を補足すると、ダブルクォーテーション、{}、ヒアドキュメント構文を 使わないように意識すればいいと思いますよ。 処理を遅らせたり、見づらくなったりしますから。 http://phpdream.seesaa.net/article/19580595.html 便利だけど、テスト的なプログラム以外には使わない、って感じですねー。
補足
処理速度のことなど考えてもいませんでした… 「.」は小さくて見づらいので避けていたのですが。 可能不可能がはっきりしたのでうまく使っていけそうです。 ありがとうございました。
補足
ありがとうございます。 . は最近使ってなかったのでつい忘れていました… ヒアドキュメントは… 無理ですかね。