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()”的结果对象上运行的“fields()”的结果对象上的“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 回答