试图理解PHP函数旁边的箭头

时间:2013-08-11 02:16:10

标签: php

所以我正在阅读关于Drupal的一些文档,我遇到了这个例子:

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

现在,我知道您将函数的结果赋给$ result变量,但为什么在此之后会出现箭头?如果我没记错的话,这些通常用于指代对象的属性 - 这是在发生什么?但这对我来说似乎并不合适。这可能是我的无知 - 但我没有看到关于这种特定效果的任何文件。

我应该如何阅读这个例子?

4 个答案:

答案 0 :(得分:2)

这只是一种更易读的写作方式:

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

答案 1 :(得分:2)

是的,这是对象的属性。

db_select('contact','c')返回一个对象,该对象有一个方法“fields”,它返回一个对象,该方法有一个方法“执行”等等......

结果对象“execute()”上的“fetchAssoc()”方法的结果“fields()”的结果对象运行在“db_select()”的结果对象上实际存储在$ result中

新行符号不会更改antything,仅用于清晰,解释器会忽略它们。

答案 2 :(得分:1)

您看到的是对每个方法的返回值的方法调用。不是将每个返回值存储在变量中,而是经常将方法链接到这样的链接。

答案 3 :(得分: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

你可以在第一个代码中链接这些行的原因是因为每个方法都返回下一个方法可以处理的东西(它是一个对象)(对象类有该方法)。