19

私はOpenCartのソースを読んでいて、以下のような表現に出くわしました。誰かが私にそれを説明できますか?

$quote = $this->{'model_shipping_' . $result['code']}->getQuote($shipping_address);

ステートメントには、奇妙なコード部分が
$this->{'model_shipping_' . $result['code']}
ありますが{}、それは何ですか?それは私にはオブジェクトに見えますが、私は本当にわかりません。

4

3 に答える 3

34

中括弧は、PHPで文字列または変数の補間を示すために使用されます。これにより、「変数関数」を作成できます。これにより、実際の関数を明示的に知らなくても関数を呼び出すことができます。

これを使用すると、配列とほぼ同じようにオブジェクトにプロパティを作成できます。

$property_name = 'foo';
$object->{$property_name} = 'bar';
// same as $object->foo = 'bar';

または、ある種のREST APIクラスがある場合は、一連のメソッドの1つを呼び出すことができます。

$allowed_methods = ('get', 'post', 'put', 'delete');
$method = strtolower($_SERVER['REQUEST_METHOD']); // eg, 'POST'

if (in_array($method, $allowed_methods)) {
    return $this->{$method}();
    // return $this->post();
}

また、次の場合に、補間をより簡単に識別するために文字列で使用されます。

$hello = 'Hello';
$result = "{$hello} world";

もちろん、これらは単純化したものです。サンプルコードの目的は、の値に応じていくつかの関数の1つを実行することです$result['code']

于 2012-01-29T19:38:19.363 に答える
10

プロパティの名前は、実行時に2つの文字列から計算されます

言う、$result['code']です'abc'、アクセスされたプロパティは

$this->model_shipping_abc

これは、プロパティ名またはメソッド名に奇妙な文字が含まれている場合にも役立ちます。

そうしないと、次のことを区別する方法がありません。

class A {
  public $f = 'f';
  public $func = 'uiae';
}

$a = new A();
echo $a->f . 'unc'; // "func"
echo $a->{'f' . 'unc'}; // "uiae"
于 2012-01-29T19:26:29.517 に答える
4

中括弧は、変数名の末尾を明示的に指定するために使用されます。

https://stackoverflow.com/a/1147942/680578

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

于 2012-01-29T19:26:26.667 に答える