1

例如这样的记录:property3->property2->property1对我来说是理解的,这意味着类的属性,是另一个类的对象,例如:

class a {
        public $property1 = "some";
}


class b {
    function __construct () {
        $this->property2 = new a();
    }           
}

$obj = new b();
echo $obj->property2->property1;

这明白了。但我无法理解这样的记录:method1()->method2()->method3()

你能发布简单的例子,谁使用这些记录?

4

2 回答 2

4

这意味着这些函数返回对象。例如,以下是可能的(假设 $pdo 是一个有效的 PDO 对象):

$result = $pdo->query("SELECT * FROM `table`")->fetchAll();

这可能并不总是有利的,因为您:

  1. 失去可读性。
  2. 失去使用中间物体的能力。
  3. 失去检查错误的能力,您指望返回您认为的方法。

    在此示例中,您只能以 an 的形式获取结果集array,但您无法访问PDOStatement由 . 返回的结果集PDO::query()。在这种情况下,它可能无关紧要,在某些情况下可能。

    此外,如果出现错误,PDO::query()可能会返回BOOLEANfalse,这将给出无法解释的“fetchAll()在非对象上使用的方法”错误。

于 2012-10-21T20:57:10.547 回答
4

一个简单的例子:

class A {

  function fooA() {
    echo "a...";
    return $this;
  }

  function fooB() {
    echo "b...";
    return $this;
  }

  function fooC() {
   echo "c...";
  }
}

$a = new A();
$a->fooA()->fooB()->fooC();

或者有几个类:

class A
{
  private $b;

  public function __construct()
  {
    $this->b = new B();
  }

  public function fooA()
  {
    echo "A...";
    return $this->b;
  }

}

class B
{

  public function fooB()
  {
    echo "B...";
  }

}

$a = new A();
$a->fooA()->fooB();
于 2012-10-21T20:58:28.133 回答