Добрый вечер! Столкнулся с проблемкой - в документации не нашел возможности работы с конструктором/деструктором при обращении к статическим методам. Т.е., при обращении к статическому методу класса нужно передать в конструктор какие-то параметры и обработать их. Приведу короткий пример: Имеется класс для работы с бд, обращение к классу такое: PHP: <?php $db = new DB('users'); #в конструктор класса передаем название таблицы $data = $db->findAll(); #вызов метода класса и присвоение результата в $data #.. и далее уже обработка данных ?> Все хорошо, но не нравится, что объявление класса занимает лишнюю строку, а при работе с множеством таблиц это существенно увеличит размер кода. Сделал в одну строку - в самом классе описал статический метод, создающий новый класс и возвращающий его. В итоге имеем: PHP: <?php #добавленный метод класса: class DB { public static function model($tbl_name) { return new DB($tbl_name); } } #удобное обращение к методу класса DB::model('users')->findAll(); ?> Есть ли более правильный подход к данной задаче? Просто на мой взгляд, не очень красиво объявлять класс дважды. Заранее спасибо, с ув. Лунтик-Некрофил.
Есть ли более правильный подход к данной задаче? Просто на мой взгляд, не очень красиво объявлять класс дважды. (что, кстати, и написано предпоследней строкой).
Обявить класс дважды нельзя. Можно класс с новым именем наследовать от старого. class myDB extends DB Но для ваших целей и это не нужно - просто объявить новый класс с именем новым. Ну и в общем, если, то такие финты смысла не имеют. Делают их, если нужно получить один экземпляр класса. Например, если вы хотите, что бы DB::model("users") всегда возвращала один и тот же объект, а не создавала новые. А для экономии строчек кода такое не делают.
Так вот меня и интересует, почему такого не делают? Например, смотрю на фреймворки - там наоборот, используется, и довольно часто. Так кому верить? Вам или разработчикам фреймворков? Меня интересуют хоть какие-то факты, доказательства.
Почитайте "синглтон" - зачем он используется. То, что вы пытаетесь сделать - это копировать внешний вид не понимая зачем он. Синглтон с параметром - это мультитон. По сути больше причин использовать статические классы - почти нет.
PHP: <? $db = new DB(); $usersData = $db->findAll('users'); $ordersData = $db->findAll('orders'); ... не?