2012-05-14 3 views
0

У меня есть приложение класса со статическими и нестационарными переменными.Как преодолеть статические переменные?

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 
+0

a. объявление переменных как puplic - наиболее эффективно, используйте переменную statis, если вы хотите ее изменить, если вы этого не сделаете, используйте const для вашего кода. – Sergey

ответ

0

На самом деле у вас есть новое ключевое слово «static» в php> 5.3.

Я изменил свой пример:

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() будет возвращать 'блокнота'; Подробнее here.

+0

Perfect Tank you !!! – Johntor

0

функция getAppName() вызов для App класса, и самостоятельно :: $ APPNAME пункт App :: $ APPNAME если вы хотите перекрытое значение, которое вы должны написать как:

class Notepad extends App{ 
    protected static $appName = 'notepad'; 
    protected $appIcon = 'notepad_icon'; 
    public static function getAppName() { 
     return self::$appName; 
    } 
} 
+0

Благодарим вас за быстрый ответ. Нет способа без объявления объявления getAppName()? – Johntor

1

Я думаю, Я нашел лучшее решение

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

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

Теперь это работает так, как должно!

+0

это отличная работа !!! – Sergey

Смежные вопросы