Алексей Допустим есть класс у которого есть конструктор и у которого есть какой-то метод.
class A {
function __construct() { ... }
function someMethod () { ... }
} Теперь есть 2 варианта вызова метода someMethod().
1.
$obj = new A();
$obj->someMethod();
2.
A::someMethod();В первом случае будет выполнен конструктор, создан экземпляр объекта ($obj - он же $this, при обращении внутри класса) , и только потом выполнен someMethod()
Во-втором случае будет выполнен только метод.
Чаще используют первый вариант.
Когда используют второй (из того что сейчас помню) :
- иногда просто схожие по теме функции объединяют в класс (в нем даже конструктор не создают). Получается такое примитивное пространство имен (namespace). Пример
http://pear.php.net/package/HTTP - Бывают случаи когда есть какое-то часто используемое применение класса, Эдакая последовательность вызовов методов класса, которая часто используется в программах и на этом работа с классом завершается. Тогда в класс добавляют один статический метод, который внутри себя создает объект своего же класса и выполняет эту последовательность методов. Пример
http://pear.php.net/package/HTTP_Download и его метод staticSend()
Пример использования :
http://pear.php.net/manual/en/package.http.http-download.intro.php (первый пример)
- работа со статическими переменными. Пример мой класс. Я в ЖЖ объяснял, что такой подход был принят по одной причине - я хочу работать с БД везде (в функциях, методах других классов) прозрачно, без передачи экземпляра класса работы с бд. Что и позволяет такой подход (так как классы находятся в глобальном пространстве имен)