2017-08-29 8 views
-4

こんにちはどうすればこのように動作するクラスを作成できますか?Classメソッド内で関数を呼び出し、最初の関数でデータを取得しますか?

$shop = new shop(); 
$shop->cart(function ($data){ 
    //$data 
})->coupon('hello world!'); 

$shop->getCoupon(); //hello world! 

どうすればいいですか?私は例を持って周りに遊んだCalling a function within a Class method?

私は元のタイトルのごめんなさい元のポスターの一部を取った。

+0

[クラスメソッド内で関数を呼び出すのは可能ですか?](https://stackoverflow.com/questions/1725165/calling-a-function-within-a-class-method) –

+0

いいえ私はいません。関数の最後にtihs - > coupon( 'hello world!')がある場合、$ shop-> cart(function($ data){ // $ data }を介してデータを取得する方法を理解できません。 – PizzaSpam

+0

あなたのコードは意味をなさないので、あなたがリンクしている質問の例とほとんど似ていません。あなたが意図した効果は全く分かりませんが、 " - >クーポン"と " - > getCoupon"という非常に基本的なレベルです。名前は少なくとも一致しなければならない、確かに?また、「ショップ」クラスはどのように見えますか? 「カート」、「クーポン」、「getCoupon」というメソッドがあるかどうか、そしてそれらが何をしているのか、そしてそれらが何を返すのかを知る必要があります。 – ADyson

答えて

2

あなたの質問は少し曖昧ですが、あなたが話していることはFluent Interfaceだと思います。それらの背後にあるアイデアは、各メソッドにインスタンスを返すことによって、単一のインスタンスに対して複数のメソッドを呼び出すことができるようにすることです。これは、一般的にクラスのセッターのために使用され、あなたのようなコードを書くことができます:あなたはこの良くも悪くもは好みの問題です見つけるかどうか

$foo = new Foo(); 
$foo 
    ->setThisThing() 
    ->setAnotherThing() 
    ->setThingToParameter($parameter) 
    ...; 

ではなく

$foo->setThisThing(); 
$foo->setAnotherThing(); 
... 

but Fluent interfaces do come some drawbacks

あなたの場合、ショップクラスは次のようになります:

<?php 
class shop 
{ 
    private $couponText; 

    public function cart($function) { 
    // Do something with $function here 

    return $this; 
    } 

    public function coupon($couponText) { 
    $this->couponText = $couponText; 

    return $this; 
    } 

    public function getCoupon() { 
    return $this->couponText; 
    } 
} 

キーパーツreturn $this;行です。これは、例のように、後続のメソッド呼び出しを互いに連鎖させることを可能にします。

例としてhttps://eval.in/851708を参照してください。

+0

ありがとう私は私のたわごとフェストのコードで動作するようになったと思う:) – PizzaSpam

関連する問題