8
<?php
    class Stat
    {
        public $var1='H';
        public static $staticVar = 'Static var';


        static function check()
        {

            echo $this->var1;               
            echo "<br />".self::$staticVar ."<br />";
            self::$staticVar = 'Changed Static';
            echo self::$staticVar."<br />";
        }
        function check2()
        {
            Stat::check();
            echo $this->var1;           
            echo "b";
        }
    }

?>

このまま使えるかな

$a = new Stat();
$a->check2();
4

4 に答える 4

10

いいえ。静的メソッドにはアクセスできません(静的コンテキストで話す$this必要がないため)。$this

静的メソッド内で現在のオブジェクトへの参照が必要な場合、それは静的メソッドではありません。ただし、非静的メソッドから静的プロパティと関数にアクセスすることはできます。

于 2013-01-16T10:14:26.580 に答える
5

他の回答が言うように、静的メソッドでインスタンス メソッドを使用することはできません。ただし、インスタンスの配列である静的プロパティを格納できます。次のようなコードを使用します。

private static $_instances = array();

public function __construct() {
    self::$_instances[] = $this;
}

このようにして、静的メソッドのすべてのインスタンスでメソッドを呼び出すことができます。次のようなコードを使用します。

public static effItAll() {
    foreach (self::$_instances as $instance) {
        $instance->instanceMethod();
    }
}

または、最後のインスタンスを保存することもできます。または、パラメーターに応じたいくつかのインスタンス。とにかく、任意のインスタンスを静的プロパティに格納できるため、静的メソッドでこのインスタンスを呼び出すことができます。

于 2013-01-16T10:19:11.990 に答える
0

いいえ。静的メソッドとインスタンス オブジェクトは、このように連携することはできません。ただし、インスタンス オブジェクトの参照を静的メソッドに渡すことができます。

static function check(&$classReference) //Adding class reference to function
{

    echo $classReference->var1;               
    echo "<br />".self::$staticVar ."<br />";
    self::$staticVar = 'Changed Static';
    echo self::$staticVar."<br />";
}
function check2()
{
    Stat::check($this); //Passing $this
    echo $this->var1;           
    echo "b";
}

ただし、可能だからといって、実行する必要があるわけではありません。はるかに優れた OOP の方法で、目的を達成する別の方法がおそらくあるでしょう。

于 2013-01-16T10:19:18.923 に答える
0

あなたはできません。説明は簡単です$this。静的メソッド コンテキストではアクセスできません。あなたが望むものを達成するには、別のデザインを見つける必要があります:-)

于 2013-01-16T10:14:54.120 に答える