14

わかりました、私はこのコードを持っています、私は勉強しています

 class scope{

    function printme(){
        return "hello";
    }

    public static function printme(){
        return "hello"; 
    }

 }

$s = new scope();
echo $s->printme(); //non-static call
echo "<br>";
echo scope::printme(); //static call

さて、これは実際には私のプロジェクトのコードではありませんが、これらは私がやりたいことです

  1. 静的関数と非静的関数を含むクラスを作成したいと思います。
  2. 静的呼び出しと非静的呼び出しの両方で関数を使用できるようにしたい。

非静的関数には多くの操作があるため、クラスをインスタンス化する必要がないように、静的関数として呼び出す必要もあります。これは可能ですか?または、関数を別の関数またはクラスに書き直す必要が本当にありましたか?

注:私がすでにいくつかの悪いプログラミングをしている場合は教えてください。

4

3 に答える 3

35

ルールは次のとおりです。

静的メソッドは、静的メソッドと非静的メソッドの両方で使用できます。

非静的メソッドは、非静的メソッドでのみ使用できます。

于 2012-06-06T03:22:43.347 に答える
6

クラスのインスタンスがめったに必要とされない場合は、静的メソッドにインスタンスを作成させ、非静的メソッドを呼び出して値を返すことができます。

class Scope {
    public function mynonstatic() {
    }

    public static function mystatic() {
        $s = new Scope();
        return $s->mynonstatic();
    }
}

静的メソッドは、実際にはスコープが縮小された単なるグローバル関数であることを忘れないでください。それらは便利ですが、正当な理由なしに作成されるべきではありません。

于 2012-06-06T03:27:25.367 に答える
2

非静的関数には多くの操作があるため、クラスをインスタンス化する必要がないように、静的関数として呼び出す必要もあります。これは可能ですか?または、関数を別の関数またはクラスに書き直す必要が本当にありましたか?

静的にする必要がある場合は、静的にします。必要ない場合は、そのままにしてください。非静的関数内から静的関数を呼び出すことができます。

class Foo
{
    public function bar()
    {
        Foo::zex();

        // or self::zex() or even $this->zex();
    }

    public static function zex()
    {
    }
}


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

逆にアリ。

class Foo
{
    public function bar()
    {

    }

    public static function zex()
    {
        $foo    = new Foo;
        $foo->bar();
    }
}

いつそれをすべきか、それともまったくすべきかは別の問題です。後者の最も一般的な使用法は、おそらくシングルトンパターンです。

于 2012-06-06T03:26:19.320 に答える