->
とを使用してメソッドを呼び出すことの基本的な違いは何ですか?::
class a
{
function b()
{
echo "abc";
}
}
これら2つの違いは何ですか?
a::b();
$c = new a; $c->b();
クラスを定義するときは、プロパティとメソッドの可視性、およびそれらが静的であるかどうかを明示的に宣言する必要があります。
例のクラスは次のようになります。
class A
{
public static function b() {
echo "abc";
}
}
メソッドb()はインスタンス変数を参照しないため、静的である必要があります。b()を呼び出すには、次を使用します。
A::b();
メソッドがインスタンス変数(非静的プロパティ)を使用する場合、クラスはおそらく次のようになります。
class Foo
{
private $bar; // non static instance variable
public function __construct($bar) {
$this->bar = $bar; // instance variable set in the constructor
}
public function baz() {
echo $this->bar; // instance variable referred to in the non-static method
}
}
次に、次のように関数を呼び出します。
$x = new Foo('abc');
$x->baz();
->
インスタンスのコンテキストでメソッドを実行し::
、クラスの静的コンテキストでメソッドにアクセスします。後者は を介してクラスの静的メンバーにのみアクセスできますがself::
、前者は を介してインスタンス メンバーを使用することもできます$this->
。
a::b();
上記のステートメントは、クラスのコンテキストで静的メソッドを呼び出すために使用されていたため(オブジェクトのコテキストとは無関係)、静的メソッドでは $this を使用できません
$c = new a; $c->b();
上記のステートメントは、オブジェクト ($c) のコンテキストでインスタンス メソッドを呼び出すために使用されたため、インスタンス メソッド内で $this(オブジェクト $c を参照) を使用できます。
ありがとう