Когда использовать статические методы / поля в PHP? - PullRequest
5 голосов
/ 02 апреля 2011

Когда я должен использовать статические функции / классы / поля в PHP?Каковы его практические применения?

Ответы [ 3 ]

5 голосов
/ 02 апреля 2011

не стоит, это редко полезно. для статики обычно используются фабричные методы и singleton :: instance ()

завод:

class Point{
  private $x;
  private $y;

  public function __construct($x, $y){
    ...
  }

  static function fromArray($arr){
    return new Point($arr["x"], $arr["y"]);
  } 
}

синглтон:

class DB{
  private $inst;

  private function __construct(){
    ...
  }

  static function instance(){
    if ($this->inst)
      return $this->inst;

    return $this->inst = new DB();
  }
}
3 голосов
/ 02 апреля 2011

Использование статических методов в одних и тех же языках на языках, таких как Java / PHP.

Один простой пример может состоять в том, что вы хотите использовать переменную во всех экземплярах вашего класса, и любой экземпляр может изменить его значение, и вы хотите, чтобыэто отражается и в другом экземпляре.

   class Foo{
    static $count=0;
    public function incrementCount(){
    self::$count++;
    }

   public function getCount(){
    return self:$count;
   }
  }

Без статики вы не можете установить значение счетчика через один объект и получить доступ к нему в других.

1 голос
/ 03 июня 2013

Я иногда использую методы STATIC, когда мне нужны простые функции в классе, которые я также использую вне класса, такие как:

в классе UserProfile У меня есть метод, который возвращает массив, который используется для передачи данных обратно в класс после заполнения массива со страницы html.

    Class UserProfile{

        Public Static get_empty_array(){

            return array('firstname'=>'',lastname=>''); //usually much more complex multi-dim arrays

        }

    }

Таким образом, пустой массив можно использовать внутри класса / объекта и снаружи как начальный шаблон. Я также использую статические методы для функций, которые обычно были бы автономными функциями, но я хочу сохранить их в классе, чтобы все было вместе, но также сделать их доступными снаружи как статический метод, такой как:

    public static convert_data($string){

        //do some data conversion or manipulating here then

        return $ret_value;


    }

    $converted_data = class::convert_data($string);

У меня есть библиотека общих пользовательских функций, но я нашел удобным включить некоторые в класс, с которым она тесно связана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...