3

以下は、静的メソッドと非静的メソッドである php クラス コードの例です。

例 1:

class A{
    //None Static method
    function foo(){
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")<br>";
        } else {
            echo "\$this is not defined.<br>";
        }
    }
 }

 $a = new A();
 $a->foo();
 A::foo();

 //result
 $this is defined (A)
 $this is not defined.

例 2:

class A{
    //Static Method
    static function foo(){
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")<br>\n";
        } else {
            echo "\$this is not defined.<br>\n";
        }
    }
 }

 $a = new A();
 $a->foo();
 A::foo();

 //result
 $this is not defined.
 $this is not defined.

これら2つのクラスの違いは何かを理解しようとしています。

none static メソッドの結果からわかるように、「$this」が定義されています。

しかし一方で、静的メソッドの結果は、両方ともインスタンス化されていても定義されていませんでした。

両方ともインスタンス化されているのに、なぜ結果が異なるのでしょうか?

これらのコードで何が起こっているか教えてください。

4

2 に答える 2

2

メソッドを使用する必要があるが、クラスを呼び出したくない場合があります。これは、クラス内の一部の関数が __construct、__destruct、... (マジック メソッド) のように自動的に呼び出されるためです。

呼び出されたクラス:

$a = new A();
$a->foo();

クラスを呼び出さないでください: (foo() 関数を実行しただけです)

A::foo();

http://php.net/manual/en/language.oop5.magic.php

于 2013-07-15T11:13:56.997 に答える