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

簡単な例:

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 に答える
4

これは、これらの関数がオブジェクトを返すことを意味します。たとえば、次のことが可能です ($pdo が有効な PDO オブジェクトであると仮定します)。

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

次の理由により、これは常に好ましいとは限りません。

  1. 可読性を失います。
  2. 間にあるオブジェクトを使用する能力を失います。
  3. エラーをチェックする能力を失い、あなたはそれが何であるかを返すメソッドを当てにしています.

    この例では、 の形式でのみ結果セットを取得しますが、によって返されるものにarrayアクセスすることはできません。この場合、問題にならない場合もありますが、問題になる場合もあります。PDOStatementPDO::query()

    また、エラーの場合はBOOLEANPDO::query()を返す場合があり、これにより、説明のつかない「オブジェクト以外で使用されたメソッド」エラーが発生します。falsefetchAll()

于 2012-10-21T20:57:10.547 に答える