2016-04-28 9 views
3

Jeffs Laracastチュートリアルのコーディング規則について見ています。インターフェイスを関数パラメータ(PHP)として渡しますか?

function signUp($subscription) 
{ 
    if ($subscription == 'monthly') 
    { 
     $this->createMonthlySubscription(); 
    } 
    elseif ($subscription == 'forever') 
    { 
     $this->createForeverSubscription(); 
    } 
} 

ここでは多型性とインターフェイスを使用したいと考えています。彼は上記のコードを次のように変更します:

function signUp(Subscription $subscription) 
{ 
    $subscription->create(); 
} 

私はここで何をしているのか分かりません。彼は関数のパラメータとしてインタフェース "Subscription"を渡していますか?以前のすべてのインターフェイスに関するチュートリアルでこれを見たことはありませんでした。

+1

'$ subscription'はインターフェイスであり、クラスではありませんか? – Daan

+6

'$ subscription'は' Subscription'インタフェースを実装するクラスのオブジェクトでなければなりません。したがって、関数のパラメータとして特定のクラスを指定する必要はありません – RomanPerekhrest

+1

これはいわゆるヒントです。こちらをご覧ください:http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration – colburton

答えて

5
function signUp(Subscription $subscription) 
{ 
    $subscription->create(); 
} 

このメソッドは、$subscriptionと呼ばれる単一のパラメータを必要とします。このパラメータは、Subscriptionインターフェイスを実装する具体的なオブジェクト(またはnull)でなければなりません。

これは、パラメータの前にいわゆる "タイプヒント"(http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration)を介して行われます。

Subscriptionここではインターフェイスである必要はなく、クラスでもよく、指定されたパラメータはSubscriptionのインスタンスまたは派生型のいずれかである必要があります。

関連する問題