Поругайте Static wrapper

WMix

герр M:)ller
Партнер клуба
Зачем новый файл для одной строчки?
грубо так, (конечно там много сервисов, не одна команда дай по id)
PHP:
<?= {new UserForm( $service->getById( $_GET['user_id']) )}->rende(); ?>
вроде логичные вещи, построй форму по индификатору пользователя. а откуда пользователя брать?
или еще проще, всего 2 буквы DB а засрали весь сервис
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
изменим немного подход
PHP:
// на уровне создания того или иного сервиса мы определим адаптер
$service = new UsersService( DB::getAdapter('users_database') );
$service2 = new UsersService( DB::getAdapter('workers') );
PHP:
// этот кусок работает какбы всегда
public function getById($id){
    return new User ($this->adapter->getRow( 'select * from users ...', $id) );
}
PHP:
<?= {new UserForm( $service->getById( $_GET['user_id']) )}->rende(); ?>
<?= {new UserForm( $service2->getById( $_GET['user_id']) )}->rende(); ?>
 
Последнее редактирование:
  • Like
Реакции: Dez

Фанат

oncle terrible
Команда форума
Не, ну давайте все-таки рассмотрим предположение, что на похапе пишут не только в стиле оопе
 

WMix

герр M:)ller
Партнер клуба
Фанат, возможно ты прав, мне тоже порою хочется забыть все и писать просто. но я такойже как ты
"почемуб не написать один раз правильно" (с) Фанат или его девушка
один раз написал сервис и он работает. на сколько хорошо у меня это получается с этими ООП выкрунтасами совершенно другой вопрос
 

Тугай

Новичок
Зачем вообще варпер нужен ?
Для PDO - например хотим кешировать запросы, мерять время их выполнения.
Нeжен ли варпер на варпер (как для safemysql) ? Скорей всего нет.

2-10 разных баз данных это как-то мало с реальностью связано. Обычно там уже фасады или свое апи. Хотя может, я не в теме.

Имхо, варпер нужен не для много баз данных, а совсем для других целей.
 
Последнее редактирование:

Absinthe

жожо

Absinthe

жожо
Но вообще да - такой подход сильно проще. И для нескольких бд подходить идеально
Это делает код грязнее, но использование удобнее.

Почему бы не сделать менеджер баз (если база одна или их мало - то просто базу) и инжектить его автоматически в модель?
И просто использовать $this->dbManager/$this->db?
 

Vladson

Сильнобухер
Покажи пример кода с работой с тремя базами.
Absinthe, а если нету его, значит ли это что такой вариант невозможен ???
Примера нету.

У меня вот гостевуха есть, там в админке нет правки постов (не нужна была тогда, не нужна и сейчас, 5 лет уже прошло, и так и не понадобилось) даже самой админки по сути нету. Значит ли это что правки постов и админки не существует ?
 

WMix

герр M:)ller
Партнер клуба
Vladson, мы знаем, что ты продвинутый пользователь и используешь phpMyAdmin
 

fixxxer

К.О.
Партнер клуба
Код:
db()->query();
vs.
DB::query()
на два движения больше! :)

Но вообще да - такой подход сильно проще. И для нескольких бд подходить идеально
И автокомплит с function db работает.

Кстати, class DB со статиками прекрасно сводится к function db со статической переменной:

PHP:
/**
 * @return SafeMysql
 */
function db(array $init_params = null) {
   static $instance = null;
   if (null !== $init_params) $instance = new SafeMysql($init_params);
   if (!instance) throw new Exception("Not initialized");
   return $instance;
}
 

AmdY

Пью пиво
Команда форума
Нормально всё, только на static переписать и реализоваться facade как в laravel, либо вариант fixxxer с функцией.
 

riff

Новичок
Моё личное мнение. Я бы стал пользоваться вариантом:

PHP:
//инициализация (один раз, где-то в загрузке проекта):
DB::initHandle('first_base', $params);
DB::initHandle('second_base', $params);

//использование
DB::$handle->query(...); //использует по-умолчанию first_base
DB::handle('second_base')->query(...); //обращаемся ко второй базе
(написал "handle" т.к. не знаю как по другому обозвать)

При всём уважении, но "db()->query()" выглядит, эммм, эээ, нууу, не красиво, + сообщение под пунктом 1.
 
Последнее редактирование:

cDLEON

Онанист РНРСlub
Ё-моё!
Вот это будет ещё проще!
PHP:
function init () {
 mysql_connect(...) or die("Can't"); 
}
// Your model code
$res = mysql_query(....);
 
Сверху