За последние 24 часа нас посетили 15898 программистов и 1630 роботов. Сейчас ищут 1047 программистов ...

php5 и mysqli

Тема в разделе "Прочие вопросы по PHP", создана пользователем danis12, 24 апр 2010.

  1. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Simpliest
    Простой и привычной
     
  2. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Бгг...

    Ты и у своей девушки будешь требовать наличие привычной для тебя щетины с твоего фото? :)

    Volt(220), не смеши. В языках с динамической типизацией она не имеет смысла - все есть, пиши код и все будет работать и немаловажный плюс не надо писать надцать функций/методов (бриться каждый день).
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Я не требую.

    Если взять, скажем, пример со switch, то либо придется писать код в case, либо в каждом case вызывать соответствующий метод/функцию. Таким образом либо усложняется читабельность, за счет втискивания разнородного кода в один метод, либо мы опять получаем эти "надцать функций/методов", только названных по-разному.
     
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Это фикция.
    Практически во всех случаях лишний код будет заключаться в нескольких строчках сетапа параметров перед основным кодом метода, которые ничего не усложнят.

    Если у тебя приходится заключать основной код внутрь case и он разный в разных ветках - то стоит поправить в консерватории, а не жаловаться на язык. Учитесь делать декомпозицию.
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Т.е. если один и тот же метод слишком по-разному обрабатывает разные данные, то скорей всего проблема в проектировании и/или алгоритме?
     
  6. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Скорей всего это должны быть два разных метода :)

    Смысл в перегрузке в том, чтобы мы с разными параметрами сделали фактически одно и тоже и выдали одинаковый результат.

    Если параметры разные, логика разная, результат разный... то что-то тут не так :)

    P.S. вставка в БД может принимать массив, объект, многомерный массив (массивов/объектов). Как несложно заметить работа со всем этим будет практически одинаковой итерируемся(возможно рекурсивно) и обрабатываем данные абсолютно одинаковой логикой.

    Можно для красоты добавить возможность передачи строки запроса - но это чаще всего только повредит (что и видно в этом примере, если мы уж передаем строку, то почему бы не использовать сразу метод $this->directQuery($sql) зачем мы толкаем ее в $this->insert() ?)
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Просто временая неоптимизированность в связи с относительной молодостью. Это всё исправится в штатном режиме. Поспособствовать можно багрепортами :)
     
  8. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Не-не... параметры разные, логика разная, результат одинаковый.

    Все дело в том, что в данном случае мои кони более сферичны и вакуумность пространства плотнее.

    PHP:
    1. <?php
    2. $db->directQuery("insert ....");
    3. $db->directQuery("update ....");
    4. $db->directQuery("delete ....");
    5. $db->directQuery("select ....");
    6. ?>
    PHP:
    1. <?php
    2. $db->insert("insert ....");
    3. $db->update("update ....");
    4. $db->delete("delete ....");
    5. $db->select("select ....");
    6. ?>
    Второй вариант по-моему читабельнее. Особенно в общей массе кода.
    Ну и продолжая рассматривать вакуум, вдруг мне понадобиться что-то делать только при insert запросах.
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Перегрузка тут причем?

    Да? Ну продолжай терзаться от отсутствия присутствующего :)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    первый вариант проще для мозга, ибо второй наталкивает на странные мысли о сознании его автора.

    а вот если убрать тавтологию то жить сразу становится проще
    PHP:
    1. <?php
    2.  $db->insert("....");
    3.  $db->update("....");
    4.  $db->delete("....");
    5.  $db->select("....");
    6.  ?>
    это если я правильно понял все эти сфеерические вакуумные конизмы, упомянутые выше.
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    В смысле?
    параметры разные (строка и массив), логика разная(использовать строку и составить строку из массива по правилам), результат одинаковый (готовый запрос).
    Разве это не перегрузка?

    На какие?

    Что конкретно понимается под "это"?
    У меня пока работает именно второй вариант.
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Дело в том, что если уж ковырять определения, то любые два метода с одинаковым названием уже перегружены.

    Но вопрос "перегрузка тут причем?" был как раз для того, чтобы подумать, почему у тебя методы с одинаковым названием но выполняющие очень разные вещи.

    Я уже писал
    Если пользоваться первым абзацем, то сложностей вообще нет никаких. Но и с "красотой" нет ничего невозможного (всего лишь +3 строки в методе)

    PHP:
    1. <?php
    2. // вариант только с массивами и объектами
    3. public function insert($params) {
    4.     $sql = $this->buildQuery('insert', 'table', $params);
    5.  
    6.     return $this->execute($sql);
    7. }
    8.  
    9. // + строка запроса
    10. public function insert($params) {
    11.     if (is_array($params)) {
    12.         $sql = $this->buildQuery('insert', 'table', $params);
    13.     } else {
    14.         $sql = $params;
    15.     }
    16.     return $this->execute($sql);
    17. }
    При излишнем усложнении ты получаешь геморрой и начинаешь жаловаться на отсутствие присутствующего.
    Поскольку даже приведенные тобой примеры ничего не показывают :)

    Тебя не затруднит привести пример с большей сферичностью, где возможности PHP были бы недостаточны для реализации параметрического или ad hoc полиморфизма (сиречь перегрузки) по отношению к методам?
    Поскольку в текущем варианте все есть и все работает :D
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Потому что чтобы сломать пенопласт достаточно колена, а чтобы сломать бревно потребуется топор или пила.

    По-моему мы топчемся на месте...
    Насколько я понял основная мысль твоего сообщения - "В PHP есть средства для организации перегрузки. Используя их можно написать качественный код."
    Но это мы обсудили чуть раньше...
    Что я упускаю?
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Не-не-не.
    Пенопласт то ты ломаешь, а вот бревно ты жуешь. В результате конечно получается примерно одинаковая крошка... но? почему ты это называешь словом "сломать" в обоих случаях? :)

    Я тебе помогу.
    Код (Text):
    1. sort(list)
    2. sort(array)
    Выполняем одинаковое действие (с разной внутренней логикой), над разными типами.

    P.S. чтобы тебе не казалось, что топчешься на одном месте - определись с целью дискуссии :)
    Я собирался всего лишь показать что перегрузка в PHP от рождения и слова об ее отсутствии не соответствуют действительности. Чего хочешь ты - тебе виднее.
     
  15. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Потому что "получается примерно одинаковая крошка". Т.е. мне важно не действие, но результат этого действия.

    А на мой взгляд это не перегрузка, а ее имитация/замена. Из этого похоже и возникла дискуссия.
    Но это лишь вопрос "привычки к понятию" и конкретному способу. Если это так, тогда я не вижу
    1) что еще конструктивного можно здесь обсудить.
    2) причин для изменения понимания мною этого понятия. =))
     
  16. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Но метод это таки действие ;)

    А ты не с той стороны смотришь. Необходимость в перегрузке возникла из-за строгой типизации параметров.
    В динамических языках - эта проблема отсутствует как класс.

    Улавливаешь? У мальчиков нет критических дней :)
     
  17. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Ничто так не мешает видеть, как точка зрения.
    Я подумаю.
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    на такие простые мысли. если есть метод ->insert то какой смысл ему скармливать полноценный запрос начинающийся с инсерта? или я че не понял?
     
  19. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Чисто логическое деление.

    Так же к примеру insert запрос может использовать другого юзера для работы с базой нежели select :)