81

SO に関する最初の質問です。これは実際の RTM 候補です。しかし、私はそれを見つけられないように見えることを約束します。私が見逃した単純なことであることが判明した場合は、喜んで #headpalm を実行します。

Zend Framework を理解しようとして、次の構文に遭遇しました。

$this->_session->{'user_id'}

メンバー変数のように見えるものにアクセスするために使用される中括弧構文を見たことがありません。とどう違うの?

$this->_session->user_id

_session は無関係だと思いますが、そうではないかもしれないので質問に含めます。

中括弧は、複合変数名 user_id をラップしようとする単純な規則ですか? それとも、ある種の特別なアクセサですか?

私がRアップできるように、TFMへのポインタは謙虚にいただければ幸いです。

どうもありがとう。優しくしてください。

4

5 に答える 5

54

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

echo "This square is {$square->width}00 centimeters broad."; 

したがって、あなたのケースは実際には2つの特別なケースの組み合わせです。中括弧などを使用してクラス変数にアクセスできます。

$class->{'variable_name'} // Same as $class->variable_name
$class->{'variable' . '_name'} // Dynamic values are also allowed

そしてあなたの場合、あなたはそれらを中括弧構文で囲んでいるだけです。

PHPのマニュアル「複雑な(中程度の)構文」を参照してください。

于 2009-07-18T16:23:21.927 に答える
24

変数変数を使用するときの構文を知っています:

$userProp = 'id';
$this->_session->{'user_'.$userProp};
于 2009-07-18T16:24:07.947 に答える
20

その構文にはおそらく1つの大きな利点がありますが、一般的には毛深いものの領域にあり、おそらく避けたいものです。

これにより、他の方法では許可されていない変数名に文字を使用できます。

すなわち:

$this->object->{"hello world\0\n"} 
$this->object->{"function(){   this is a truely awful  name for a variable }"} 
于 2009-07-18T16:32:57.553 に答える
13

あなたが与える例では、実際の違いはあり$this->_session->user_idません.IMOはより明確であるため、使用する必要があります。

中括弧構文が実際に適しているのは、 のように名前の式を作成してメンバー変数にアクセスすることです$this->_session->{'user_id' . $index}

于 2009-07-18T16:46:43.017 に答える
11

あなたの質問の2つの例は同じことをします。PHPを使用すると、いくつかの方法でメンバーのデータ/メソッドにアクセスできます...

object->{'name_of_member'};

object->name_of_member;

$member = 'name_of_member';
object->$member;
于 2009-07-18T16:28:10.543 に答える