2013-04-09 15 views
47

私はいくつかのフレームワークでのコード行を見ました:新しい静的な意味は?

return new static($view, $data); 

あなたがnew staticを理解する方法を教えてください。

+0

これはどのフレームワークですか? –

+0

例えばlaravelですが、コアでしか見つかりませんでしたが、そのAPIを使用中ではありません – Hello

+2

詳細についてはこのページをチェックしてください。 http://stackoverflow.com/questions/5197300/new-self-vs-new-static –

答えて

76

new self()をクラスのメンバー関数の中に書くと、そのクラスのインスタンスが得られます。 That's the magic of the self keyword

ので:

class Foo 
{ 
    public static function baz() { 
     return new self(); 
    } 
} 

$x = Foo::baz(); // $x is now a `Foo` 

あなたが使用される静的修飾子が派生クラスのためであってもFooを得る:

class Bar extends Foo 
{ 
} 

$z = Bar::baz(); // $z is now a `Foo` 

あなたは(意味での)多型を有効にする場合、およびあなたが使用した修飾子にPHPが注意を払うように、staticキーワードのselfキーワードをスワップすることができます:

class Foo 
{ 
    public static function baz() { 
     return new static(); 
    } 
} 

class Bar extends Foo 
{ 
} 

$wow = Bar::baz(); // $wow is now a `Bar`, even though `baz()` is in base `Foo` 

これは、late static bindingと呼ばれるPHPの機能によって可能になりました。それ以外の、より一般的なキーワードstaticの使用と混同しないでください。

+10

hmm..shortly:new static() - どのクラスが拡張されているかに関係なく、現在のクラスのオブジェクトを返します。new self() - そのメソッドが宣言または拡張されたクラスからオブジェクトを返します。機能)...私は理解していますか? – Hello

+1

@Hello:基本的に。 –

+1

ええ、私にとっては十分です)基本的には) – Hello

関連する問題