0

Drupal に関するドキュメントを読んでいると、次の例に出くわしました。

$result = db_select('contact', 'c')
    ->fields('c')
    ->execute()
    ->fetchAssoc();

関数の結果を $result 変数に代入しているのはわかりましたが、この後に矢印があるのはなぜですか? これらは通常、オブジェクトのプロパティを参照するために使用されますが、正しく思い出せば、ここで何が起こっているのでしょうか? それは私には意味がないように思えますが。これは私の無知かもしれませんが、この特定の効果に関するドキュメントは見当たりません。

この例をどのように読むべきですか?

4

4 に答える 4

2

これは、より読みやすい書き方です。

$result = db_select('contact', 'c')->fields('c')->execute()->fetchAssoc();
于 2013-08-11T02:18:23.380 に答える
2

はい、これはオブジェクトのプロパティです。

db_select('contact', 'c') は、メソッド「fields」を持つオブジェクトを返し、メソッド「execute」を持つオブジェクトを返します...

"db_select()" の結果オブジェクトに対して実行された "execute()" の結果オブジェクトに対する "fetchAssoc()" メソッドの結果は、実際には $result に格納されます。

改行記号は何も変更しません。明確にするためにのみ使用され、インタープリターはそれらを無視します。

于 2013-08-11T02:18:39.217 に答える
1

これは Drupal に固有のものではなく、関連するオブジェクト (したがってクラス) がそれを許可するように作成されている場合に実行できます。

$result = db_select('contact', 'c')
    ->fields('c')
    ->execute()
    ->fetchAssoc();

正確には:

$result = db_select('contact', 'c');   // $results is now a SelectQuery object
$result = $results->fields('c');       // $results is now a ???
$result = $results->execute;           /* $results is now a DatabaseConnection_mysql 
                                          object, which you can loop over, to return 
                                          individual results */
$result = $results->fetchAssoc();      // $results is now an associative array

そして、最初のコードのようにこれらの行を連鎖できる理由は、各メソッドが次のメソッドが処理できる何か (オブジェクト) を返すためです (オブジェクト クラスにはそのメソッドがあります)。

于 2013-08-11T02:43:14.720 に答える
1

表示されるのは、これらの各メソッドの戻り値に対するメソッド呼び出しです。各戻り値を変数に格納する代わりに、多くの場合、メソッドはこのように連鎖します。

于 2013-08-11T02:21:44.183 に答える