Наследование статических участников в PHP

С более новой версией Android> = API 16 использовать finishAffinity ()

finishAffinity (); сделал свое дело.

Поскольку я читаю везде, предлагается использовать just finish (); Для более нового API (я использую> = 17) пришлось использовать finishAffinity ();

34
задан hakre 1 July 2012 в 15:55
поделиться

2 ответа

Классический пример того, почему использование помех как globals (функции в этом случае) является плохой идеей, неважно, язык.

самый устойчивый метод должен создать несколько реализация sub классы абстрактного класса "Действия".

Затем, чтобы попытаться удалить часть раздражения из-за инстанцирования экземпляра класса только для вызова это - методы, можно перенести его в какую-то фабрику.

, Например:

abstract class AbstractAction {
  public abstract function do();
}

class FooAction extends AbstractAction {
  public function do() {
    echo "Do Foo Action";
  }
}

class BarAction extends AbstractAction {
  public function do() {
    echo "Do Bar Action";
  }
}

Затем создают фабрику для "помогания" в инстанцировании функции

class ActionFactory {
  public static function get($action_name) {
    //... return AbstractAction instance here
  }  
}

Затем использование это как:

ActionFactory::get('foo')->do();
16
ответ дан 27 November 2019 в 16:28
поделиться

Предстоящий PHP, который 5.3.0 выпуска включают последнее статическое связывание , который мог бы помочь. При использовании этой функции Вы могли использовать статическую переменную в статическом методе и позволить последнему статическому связыванию заботиться о нахождении "правильного" метода.

class Foo {
    public static function getDefault() {
        static $default = 'DEFAULT';
        return $default;
    }
    public static function doSomething ($param) {
        $default=static::getDefault(); // here is the late static binding
        $param = ($param === FALSE) ? $default : $param;
        return $param;

    }
}

class Bar extends Foo {
     public static function getDefault() {
        static $default = 'NEW DEFAULT FOR CHILD CLASS';
        return $default;
    }
}
27
ответ дан 27 November 2019 в 16:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: