3

PHPで定数の内容を解析することは可能ですか?

例えば、

define('WHO_AM_I', 'My name is $_SESSION['who_am_i'].'); // setup the constant string
echo eval(WHO_AM_I); // something like this -- but the eval() returns an error

_SESSION 変数の値は、後でスクリプト ストリームで実際に定数を使用するまでわからないことに注意してください。

ありがとう。

これを行いたい理由で修正

スクリプトから「ハードコーディング」を引き出し、ユーザーがサイトで特定の分類法を構成できるようにしたいと考えています。そのため、これを行っている間に、スクリプトの後半で解析できると思われる準動的定数も作成したいと考えました。

出来ないなら・・・出来ない。

ただし、質問をしたことで私を撃たないでください。

この混乱を避けるための最後のコメント

私の質問の目的は、 eval() 関数とは関係ありません。そもそも入れてしまったことを後悔しています。

質問に eval() を入れたのは、スタックオーバーフローのメンバーに、オープンエンドを尋ねるのではなく、質問の準備を少ししたことを示すためだけです。したがって、eval() は無視してください。

私が知りたいのは、スクリプトの後半で割り当てられた値を解析できるようにする方法で define() を何らかの方法で作成できるかということだけです。それだけです、それだけです。

修正C

このようにしたくありませんが、次のことができることはわかっています。

define('PARSE_ABLE_CONSTANT_PART_A', 'My name is ');
define('PARSE_ABLE_CONSTANT_PART_B', '.');

...後でスクリプトの道をたどります...

echo PARSE_ABLE_CONSTANT_PART_A . $_SESSION['who_am_i'] . PARSE_ABLE_CONSTANT_PART_B;

定数に埋め込まれた変数を使用して滑らかにすることができれば、このようにしたくありません。

4

2 に答える 2

2

他のユーザーが指摘しているように、これは本当に怪しいようです。必要に応じて、次のようなことを行うことができます。

define('WHO_AM_I', 'echo \'My name is \'.$_SESSION[\'who_am_i\'];');
eval(WHO_AM_I);

これは常に変数をエコーし​​ます。式afaikを評価する必要があります。

編集内容を読んでください。.iniファイル、または静的プロパティを持つ静的クラスの方が適していると思います。それをはるかに柔軟にし、評価を回避します。あなたは私が見ることができるものからユーザー生成コンテンツを話している-それを評価呼び出しにかけることは非常に安全ではないようだ。

使用できる静的クラスの簡単な例:

<?php
class myConstants{
  public static function _($key){
    switch($key){
      case "WHO_AM_I":
        return "My name is ".$_SESSION['who_am_i'];
        break;
      case "OTHER_CONSTANT":
        // does some other evaluation and returns a string
        break;
    }
    throw new Exception("Constant isn't defined");
  }
}
?>

その後、あなたはただすることができますecho myConstants::_('WHO_AM_I');

于 2013-01-23T22:24:59.370 に答える
1

定義による定数では、動的コンテンツで設定することはできません。

以下はPHPマニュアルからの引用です。

名前が示すように、その値はスクリプトの実行中に変更できません

ここに行くともっと見ることができます

あなたは魔法の定数について考えているかもしれません

于 2013-01-23T22:19:56.547 に答える