2012-02-07 3 views
-1

これに関する情報を見つけようとしましたが、おそらく使用された文字のために結果を得ることができません。OOPの - >と::の相違点

次の違いとは何か、私は同じことを彼らが集めるものと同じです。

$classname->function() 
Classname::function() 

第2の例では、オブジェクトを自動的にインスタンス化しますか?

+2

これまでに何百万回もカバーされています。あなたのPHPブックはどこですか? –

+0

[参考 - このシンボルはPHPで何を意味しますか?](http://stackoverflow.com/questions/3737139/reference-what-dis-symbol-mean-in-php) – hakre

答えて

3

非スタティックメンバー(メソッドまたは関数/プロパティまたは変数)を呼び出すために前者(->)が使用され、後で(::)が静的メンバーを呼び出すために使用されます。

非静的:

class foo{ 
    function bar(){ echo 'test'; } 
} 

$foo = new foo(); 
$foo->bar(); 

静的:

class foo{ 
    static function bar(){ echo 'test'; } 
} 

foo::bar(); // no class initialization needed 

詳細は、この質問を参照してください:より良い目を理解するために

PHP: Static and non Static functions and Objects

をあなたは、what static methods areをチェックして、それらが非静的なものとどう違うのかを調べるべきです。

+0

これは本当に問題を解決しました私のために、私は彼らが正直では異なる名前を持っていたことを知らなかった。しかし、多くの感謝。 –

+0

@ShaneJones:あなたはようこそ – Sarfraz

1

いいえ、2番目のメソッドは静的メソッドを呼び出しています。 Check here

1

2番目の例では、オブジェクトを自動的にインスタンス化しません。したがって、関数の$ thisを使用した場合は、次のようなエラーが発生します。 PHP致命的なエラー:オブジェクトコンテキストにないときに$ thisを使用する。
通常、非静的メソッドを呼び出すためには - >が使用され、静的メソッドを呼び出すには::が使用されます。
しかし、それはPHPでは厳密ではありません。たとえば :

error_reporting(E_ALL); 
class A { 
    public static function staticFunc() { 
     echo "static"; 
    } 

    public function instanceFunc() { 
     echo "instance";  
    } 
} 

A::instanceFunc(); // echo "instance" 
$a = new A(); 
$a->staticFunc(); // echo "static" 

正常に実行され、上記と呼ばれる2つの方法。
phpは新しい機能を常に進歩的な方法で実装しているため、互換性を保証しています。その結果、詳細はほとんど気になりません。 しかし、あなたはE_STRICTするのerror_reportingレベルを設定する場合は、このようなE_STRICTエラー見つける:
厳しい基準:非静的メソッドA :: instanceFunc()

これらの唯一の違い静的に呼び出すことはできませんが2つの方法があります:::を使ってメソッドを呼び出すと、変数$ thisを使用することはできません。

しかし、これらの2つの方法を他のオブジェクト指向言語と同じように厳密に使用することをお勧めします。
詳細はこちらhttp://www.php-internal.com/book/?p=chapt05/05-02-class-member-variables-and-methods

関連する問題