2016-11-21 16 views
3

Laravel hereに関する短いチュートリアルを読んでいました。私は一般的にlaravelまたは開発の経験おりませんので、私はこのコードの一部が正確に何をするか疑問に思って:コロンで関数を宣言した後のLaravel呼び出しモデル

public function approve(): User 

それは私には思われると、それだけで内部からモデルを呼び出すのと同じことですこのように機能します:

App\User:: 

この2つの承認の違いは何ですか?

答えて

3

いいえ、それらは同じではありません。最初のコードはPHP 7のreturn type declerationsを利用しています。

のインスタンスがUserクラスのインスタンスを返さなければならない、またはPHPがTypeErrorを投げ捨てると言われています。戻り値の型宣言を定義するときには、クラスのFQNを指定することができます。

public function approve(): \App\User 

のインタフェースを定義するときには、特別に便利です:
https://secure.php.net/manual/en/migration70.new-features.php:PHP 7への道を作った他の何のRFC

interface CommentsIterator extends Iterator { 
    function current(): Comment; 
    // This enforces that any implementation of current() 
    // method, must return an instance of Comment class. 
} 

参照してください。

そして、PHP 7の新機能に関するJeffreyのスクリーンキャストを自分で扱う:
https://laracasts.com/series/php7-up-and-running/episodes/3

しかし、2番目のコード(App\User::whatever())は、App\Userクラスの静的メソッドwhatever()を呼び出すだけです。これは、戻り値の型を強制する最初のコード例とは関係ありません。

4

共有最初の例:

public function approve(): User 

は、単にあなたがPHPに静的な型のプログラミング手法を使用することができますPHP7の機能です。基本的にこの新しい関数シグネチャは、この関数がUser型を返す必要があること、またはTypeError例外をスローすることを示しています。

共有第二の例:

App\User:: 

が使用しているがスコープ定義演算子::)と呼ばれるものをこの演算子を使用すると、クラスレベル/静的メソッドを呼び出すことができます。 Laravelでは、例えば、そのようなものであろう:

App\User::Find(1); 

又は

App\User::Where('id', 1); 

これらはそうように呼ばれることになるオブジェクト・レベル・メソッド異なる:

$user = new App\User(); 
$user->id = 1; 
$user->save() 

注意クラスインスタンスは->演算子を使用します。あなたが私には、以下のリンクに言及したことについての詳細を学ぶことができます

https://secure.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration

http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php

https://laravel.com/docs/5.3/eloquent

運のベスト!

関連する問題