Вопрос по ООП. Статические методы и свойства

R
На сайте с 13.06.2009
Offline
47
1618

Объясните пожалуйста для чего, когда, зачем, а главное в чем их плюсы?

Теорию я читал: "Статические элементы принадлежат не объекту, а классу".

Пример со счетчиком объектов (статическое свойство) я тоже видел. Но всераво не понимаю как реально и когда надо их применять и в чем их польза.

Вот например нашел код:

class DB

{
/**
* Подключение к базе данных
* Параметры подключения жестко заданы в теле метода
*
* @exception Exception невозможно подключение или выбор базы
*/
public static function connect()
{
self::$linkId = mysql_connect('xxx', 'xxx', 'xxx');
if (self::$linkId === false) {
throw new Exception('Нет соединения');
}
if (!mysql_select_db('xxx', self::$linkId)) {
throw new Exception('Нет базы');
}
return true;
}

/**
* Идентификатор подключения
*
* @var Resource
*/
private static $linkId;
}

Зачем сделали статическими метод и свойство.

Как я понимаю при такой записи, если я подключился к одной базе и считал из нее данные, а потом подключился к другой базе и считал оттуда, то если мне потребуются после этого взять чтото еще из первой базы, то придется конектиться опять ˜— $linkId статичный, а значит он перезаписался.

Так в чем тогда польза?

DeveloperRu
На сайте с 27.02.2009
Offline
72
#1

в данном примере нет выбора базы

в данном примере показан коннект к серверу - и вот на этом сервере ты можешь выбирать разные базы

и в self::$linkId хранится ресурс коннекта к серверу

DeveloperRu добавил 04.04.2010 в 15:50

resource mysql_connect ( [string server [, string username [, string password

Ответы на вопросы (http://telenok.com)
[Удален]
#2

статические методы хороши там, где не требуют информации от объекта, выступают в роли "именнованного хранилища функций"

R
На сайте с 13.06.2009
Offline
47
#3
DeveloperRu:
в данном примере нет выбора базы

в данном примере показан коннект к серверу - и вот на этом сервере ты можешь выбирать разные базы

и в self::$linkId хранится ресурс коннекта к серверу

DeveloperRu добавил 04.04.2010 в 15:50
resource mysql_connect ( [string server [, string username [, string password

Сори ошибся. Хотел сказать, что конект к серверу. Что хранит self::$linkId я понимаю по этому и мне интересно чем такой подход (объявление статичным свойство и методы) лучше, правильней, логичней. Ведь как я уже выше написал при конекте еще к одному серверу и последующем обращение к первому идентификатор соединения перезапишется и конектится придется по новой (или я непонимаю сути). Чем же тогда это выгодно?

bearman:
статические методы хороши там, где не требуют информации от объекта, выступают в роли "именнованного хранилища функций"

Именовонное хранилище функций — кто как я понимаю для того, чтобы можно было создавать и делить функции по области действия (так сказать) и у каждой будет свой префикс DB::name() app::name(). Хм... возможно это удобно. Но вот например встречал классы в которых часть методов статичные а часть нет (так же и свойства), вот по какому признаку решают делать тот или иной метод статичным?

[Удален]
#4
bearman:
где не требуют информации от объекта,

покажу на примере :)

DB::query($sql) - требует объекта? да, потому что есть $link

DB::escape($string) - требует? нет, потому что работает только со строкой. както так, на тупом примере)

SG
На сайте с 22.04.2008
Offline
32
SAG
#5

По-моему это просто извратная реализация синглтона или хз... У класса всего 1 свойство и 1 метод, если это весь код. И оба статичные. Значит, сколько инстанций не клепай, выглядеть они будут одинаково.

Портфолио (http://beastman.me). Верстаю (/ru/forum/228498). Програмлю (/ru/forum/348359). Последние отзывы (/ru/forum/470865). Контакты: ICQ: 31377144пять;E-mail: andrschwartz<собако>gmail.com

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий