0

たぶん私の質問は何度か聞かれましたが...

私は次のコードを持っています

abstract class ParentClass
{
    protected static $count=0;
    public static function inc()
    {
        static::$count++;
    }
    public static function getCount()
    {
        return static::$count;
    }
}

class FirstChild extends ParentClass
{

}
class SecondChild extends ParentClass
{

}

そして、私はそれをこのように使用します

FirstChild::inc();
echo SecondChild::getCount();

「1」と表示されます。そして、おそらくあなたが推測するように、私は「0」が必要です:)

私は2つの方法を見ます:

  1. protected static $count=0;各派生クラスへの追加
  2. 整数$countではなく配列を作成します。そして、そのようなことincgetCountメソッドで実行します。

    static :: $ count [get_called_class()] ++;

return static::$count[get_called_class()];

しかし、これらの方法は少し醜いと思います。まず、避けたいことをコピー/貼り付けします。第二に-まあ、私は知りません:)私はそれが好きではありません。

私が望むものを達成するためのより良い方法はありますか?

前もって感謝します。

4

3 に答える 3

1

いいえ、これに対処するための2つの最も実用的なオプションを正確に示しました。PHPは魔法のようには機能しません。プロパティを宣言すると、static protectedまさにそれが得られます。1つのプロパティです。あなたが提供する構文が機能した場合、それを行う必要のあるすべての人にとっては朗報かもしれませんが、PHPOOPがやや正常な方法で動作することを期待する他のすべての人にとっては絶対に恐ろしいニュースです。

ちなみに、例外なくすべての派生クラスに個別のカウンターが必要ない場合は、protected static $count = 0派生クラスで明示的にカウンターを必要とするものを美しいソリューションと見なします。独自のカウンターが必要で、カウンターを要求します。その事実は、誰もが見ることができるようにコードに書かれたままです。

于 2012-10-02T12:18:44.120 に答える
1

あなたがやろうとしていることについては、抽象クラスにインターフェースメソッド(getCount()など)を持ち、派生クラスにカウンターを置くことは、最悪の選択肢ではないと思います。そのカウントのすべてのインスタンスをカウントしていない場合、親クラスに抽象静的カウントを含めることは意味がありません。

一般的に、全体のアイデアは少し醜いと思います。したがって、実装も醜いでしょう:)

于 2012-10-02T12:19:22.400 に答える
0

保護された静的$count=0を宣言できます。子クラスごとに、そのようにすると、子クラスごとに一意になりますが、クラスのすべてのインスタンスに共通になります。それが彼の問題に対する最もエレガントな解決策です。

abstract class ParentClass
{
    public static function inc()
    {
        static::$count++;
    }
    public static function getCount()
    {
        return static::$count;
    }
}

class FirstChild extends ParentClass
{
    protected static $count=0;
}
class SecondChild extends ParentClass
{
    protected static $count=0;
}
于 2016-07-17T21:02:34.943 に答える