0

静的変数と非静的変数を持つクラスAppがあります。

class App{
    protected static $appName = 'dummy';
    protected $appIcon = 'icon';

    public static function getAppName() {
        return self::$appName;
    }
}

次に、このクラスをこのように拡張します

class Notepad extends App{
    private static $appName = 'notepad';
    private $appIcon = 'notepad_icon';
}

メモ帳のインスタンスを作成せずにappNameを取得したい。Notepad :: getAppName()を試しましたが、これは常にダミーを返します。

任意のアイデアや提案???

前もって感謝します!

J!

セルゲイの投稿後:

私は、このようなことを行うための最もOOPの方法であり、最も効率的な(速度/メモリ)方法をさまよっていましたか?

a. declaring variables as puplic

b. creating an instance of an object just to get a few variables

c. rewrite the static function to all the children classes as Sergey suggested
4

3 に答える 3

1

私はより良い解決策を見つけたと思います

class App{
    protected static $appName = 'dummy';
    protected $appIcon = 'icon';

    public static function getAppName() {
        $c = get_called_class();
        return $c::$appName;
    }
}

今では正常に動作します!!!

于 2012-05-14T21:14:32.847 に答える
0

実際には、php>5.3に新しいキーワード「static」があります。

私はあなたの例を変更しました:

class App{
    protected static $appName = 'dummy';
    protected $appIcon = 'icon';

    public static function getAppName() {
        return static::$appName;
    }
}

class Notepad extends App{
    protected static $appName = 'notepad';
    protected $appIcon = 'notepad_icon';
}

このようにして、Notepad :: getAppName()は'notepad'を返します。詳細はこちら

于 2012-05-14T21:36:37.167 に答える
0

関数 getAppName() App クラスの呼び出し、および self::$appName が App::$appName を指している場合は、オーバーライドされた値が必要な場合は、次のように記述する必要があります。

class Notepad extends App{
    protected static $appName = 'notepad';
    protected $appIcon = 'notepad_icon';
    public static function getAppName() {
        return self::$appName;
    }
}
于 2012-05-14T11:47:14.390 に答える