0

クラス名内で変数を使用したい。

たとえば、$var「index2」という名前の変数を設定してみましょう。index2今、私はこのようなクラス名の中に印刷したい:

controller_index2ですが、手動で行う代わりに、次のように var 名をそこに出力できます。

controller_$var;

しかし、それは構文エラーだと思います。

これどうやってするの?

    function __construct()
    {
        $this->_section = self::path();

        new Controller_{$this->_section};

    }
4

5 に答える 5

2

これは恐ろしいハックですが、次のとおりです。

php > class foo { function x_1() { echo 'success'; } };
php > $x = new foo;
php > $one = 1;
php > $x->{"x_$one"}();
          ^^^^^^^^^^^^
success

オンザフライでメソッド名を文字列として構築しようとする代わりに、メソッドの配列の方が適している場合があります。次に、変数を配列のキーとして使用します。

于 2013-07-17T15:00:37.727 に答える
1

二重引用符で囲まれた文字列としてエコーします。

echo "controller_{$var}";

これを試してください(OPのコードに基づいて):

function __construct()
{
    $this->_section = self::path();

    $controller_name = "Controller_{$this->_section}";

    $controller = new $controller_name;

}
于 2013-07-17T14:58:05.337 に答える
1

これを行うことができます....次の構文に従います

function __construct()
{
    $this->_section = self::path();
    $classname = "Controller_".$this->_section;
    $instance = new $classname();

}

文字列定義からオブジェクトを作成する別の方法は、ReflectionClassを使用することです。

$classname = "Controller_".$this->_section;
$reflector = new ReflectionClass($classname);

クラス名にコンストラクター引数がない場合

$obj = $reflector->newInstance();

コンストラクターに引数を渡す必要がある場合は、次のいずれかを使用できます

$obj = $reflector->newInstance($arg1, $arg2);

または配列に引数がある場合

$obj = $reflector->newInstanceArgs($argArray);
于 2013-07-17T15:01:50.593 に答える
0

これを試して:

  $name = "controller_$var";
  echo $this->$name;
于 2013-07-17T15:00:27.537 に答える