3

js のような PHP の書き方をテストしていますが、これは可能でしょうか。

クラスCにA、B機能があるとします。

Class C{
   function A(){

   }
   function B(){

   }
}
$D = new C;

$D->A()->B(); // <- Is this possible and how??

Jsでは、簡単に書くことができますlike D.A().B();

の中で試しましreturn $thisたがfunction A()、うまくいきませんでした。

アドバイスありがとうございます。

4

4 に答える 4

9

あなたが探しているのは流暢なインターフェースと呼ばれるものです。クラスメソッドが自分自身を返すようにすることで実装できます。

Class C{
   function A(){
        return $this;
   }
   function B(){
        return $this;
   }
}
于 2013-01-21T09:17:19.257 に答える
8

$thisメソッド内で戻るのA()が実際の方法です。動作しなかったと思われるコードを示してください (そのコードには別のエラーがあった可能性があります)。

于 2013-01-21T09:17:26.553 に答える
4

実際にはかなり単純です。すべて元の (または他の) オブジェクトを返す一連のミューテーター メソッドがあり、関数を呼び出し続けることができます。

<?php
class fakeString
{
    private $str;
    function __construct()
    {
        $this->str = "";
    }

    function addA()
    {
        $this->str .= "a";
        return $this;
    }

    function addB()
    {
        $this->str .= "b";
        return $this;
    }

    function getStr()
    {
        return $this->str;
    }
}


$a = new fakeString();


echo $a->addA()->addB()->getStr();

これは「ab」を出力します

関数内で戻る$thisと、jQuery と同じように、同じオブジェクトで他の関数を呼び出すことができます。

于 2013-01-21T09:17:39.317 に答える
2

私はそれを試しました、そしてそれは働きました

<?php

class C
{
  public function a() { return $this; }
  public function b(){ }
}

$c = new C();
$c->a()->b();
?>
于 2013-01-21T09:20:36.587 に答える