2015-11-01 3 views
5

私はいくつかのサンプルPHPスクリプトは、お互いの後に関数を使用することができますが、私はそのようなスクリプトを書く方法を見つけることができませんでした。この種のphp関数を定義するには?

私は、PHPスクリプトを書く場合:

class apple { 
    function banana() { 
    echo 'Hi!'; 
    } 
} 

私は機能banana呼びたいときには、次のようになります。

$apple = new apple; 
$apple->banana(); 

を私は右、前後の関数をコールする場合1のように:

$ apple-> banana() - > orange()

私は別の関数の中に関数を入れようとしましたが、エラーとともに返します。 どうすればこのようなスクリプトを書くことができますか?

+4

[PHPメソッドチェーン?](http://stackoverflow.com/questions/3724112/php-method-chaining) –

答えて

6

このコードの可能性のある重複し、あなたのメソッドチェーンを改善することである

<?php 

    class Fruits 
    { 
     public function banana() 
     { 
      echo 'Hi i am banana!'.'<br>'; 
      return $this; 
     } 

     public function orange() 
     { 
      echo 'Hi i am orange!'.'<br>'; 
      return $this; 
     } 

     public function __call($mName,$mValues) 
     { 
      echo 'Hi i am '.$mName.'!'.'<br>'; 
      return $this; 
     } 
    } 

    $fruits = new Fruits(); 
    $fruits->banana()->orange()->grape()->avocado(); 
+0

'$ mValues'とは何ですか? – timo

+0

@timo '$ mValues'は、未定義のメソッドに渡される引数の配列です。 –

+0

@timo 'avocado( 'one'、 'two')メソッドに引数を渡すと、それらの引数は' $ mValues'配列に格納されます。 –

4

あなたはこのような何かを行うことができます。これは、このような何かへのショートカットです

class apple { 
    public function banana() { 
    echo 'Hi!'; 
    return $this; 
    } 
    public function orange() { 
     echo 'Hi from orange'; 
     return $this; 
    } 
} 

$apple = new apple; 
$apple->banana()->orange(); 

:最後に

$apple = new apple; 
$same_apple = $apple->banana(); 
// $apple and $same_apple are the same thing here. 
$still_the_same_apple = $same_apple->orange(); 

は、$リンゴと$ still_the_same_appleはあなたが作成したのと同じインスタンスです最初の場所。何

+0

'$ apple = new apple;'と '$ apple = new apple();'の違いは? – timo

+0

コンストラクタ引数を指定しない場合は、違いはありません。これについての議論があります:http://stackoverflow.com/questions/3873111/instantiate-a-class-with-or-without-parentheses – MikeWu

関連する問題