Статический метод нужен тогда, когда ты не работаешь с экземпляром класса, но реализация метода связанна с данным классом
Например, у тебя есть класс News
class News
{
public $id;
public $title;
public $text;
public function __construct($id = 0)
{
if ($id > 0) {
$row = $this->db->query('SELECT * FROM news WHERE id = ' . (int)$id);
if (! empty($row)) {
$this->id = $row['id'];
$this->title = $row['title'];
$this->text = $row['text'];
}
}
}
public function save()
{
$this->db->query('INSERT INTO news .....');
}
public static function getAll()
{
$news = array();
$rows = $this->db->query('SELECT id FROM news');
foreach ($rows as $row) {
$news[] = new News($row['id']);
}
return $news;
}
}
Можно создать пустой объект
$news = new News();
Можно создать объект, содержащий новость с id = 15
$news = new News(15);
А теперь нам нужны все новости.
Как быть? Ведь и тут и там новости, но объект может содержать только один экземпляр.
Делаем статический метод, который нам вернет массив объектов своего класса.
$news_all = News::getAll();
_____________
[продано копирайтерам]