За последние 24 часа нас посетили 18635 программистов и 1599 роботов. Сейчас ищут 967 программистов ...

Не знаю как исправить ошибку.

Тема в разделе "PHP для новичков", создана пользователем In_The_Real, 11 июл 2014.

  1. In_The_Real

    In_The_Real Новичок

    С нами с:
    11 июл 2014
    Сообщения:
    26
    Симпатии:
    0
    Кстати, а можно ли реализовать эту задачу с помощью абстрактных классов или итерфейсов, и будет ли так правильней?
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну в этом виде её можно реализовать даже без наследования :))) Не используйте средства языка просто потому что вы их знаете.
    Код (PHP):
    1.      class repository {
    2.             private $db;
    3.             protected $table_name = '';
    4.            
    5.             public function __construct($db, $table_name) {
    6.                  $this->db = $db;
    7.                  $this->table_name = $table_name;
    8.             }
    9.            
    10.             public function get_all() {
    11.                  $res = $this->db->query("select * from $this->table_name");
    12.                  $elems = $res->fetch_all();
    13.                  $res->free();
    14.                  return $elems;
    15.             }
    16.         }
    17.  
    18.         $db = new mysqli(HOST, USER, PASS, DB_NAME);
    19.         $news = new repository($db, "news");
    20.  
    21.         foreach ($news->get_all() as $news)
    22.             var_export($news);
    Вы поймите, что объектное приложение нужно сначала спроектировать, а потом уже реализовывать. Вы вот реально сделайте сейчас простое упражнение, и выложите сюда. В одну колонку выпишите все существительные, относящиеся к вашей задаче. В другую колонку - что они должны уметь делать, или что с ними можно делать. В третью - кем инициируется действие (к примеру, пользователем, или одним из участников системы, записанных на первом шаге; что-то типа документ просит фигуру нарисовать себя). Вот после этого можно будет говорить о том, какие вам нужны классы, интерфейсы и т.п. Это, конечно, упрощённое проектирование, но для не сильно сложных задач таких вещей бывает достаточно.
     
  3. In_The_Real

    In_The_Real Новичок

    С нами с:
    11 июл 2014
    Сообщения:
    26
    Симпатии:
    0
    Если я точно вас понял то вот: 1. Подключаться к БД, выбирать оттуда все, выводить. Вот и вся задача =)
     
  4. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Задача - это у вас. Я вам пример кода даю для того, что вы в первом посте пытались изобразить. Если для вас это вся задача, ну пользуйтесь....
     
  5. In_The_Real

    In_The_Real Новичок

    С нами с:
    11 июл 2014
    Сообщения:
    26
    Симпатии:
    0
    А можно еще вопрос? Про то как правильно подключатся к БД в ООП стиле, гугл выдал очень много всего, и все способы очень разные, а как подключаться правильно?
     
  6. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    С базой сейчас принято работать либо через mysqli, либо через PDO. Я люблю mysqli, хотя PDO в некотором роде мощнее. mysqli - в моём примере. PDO - читайте документацию
     
  7. In_The_Real

    In_The_Real Новичок

    С нами с:
    11 июл 2014
    Сообщения:
    26
    Симпатии:
    0
    Про это то я знаю. Я хотел уточнить как работать с расширением mysqli в стиле ООП, слышал про какие-то обертки, но пока что подключаюсь как написано в документации (когда расширяем класс mysqli). А стоит ли использовать эти обертки?
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Зависит от задачи. Мне хватает mysqli, единственное, я его иногда расширяю, чтоб при ошибках он автоматически логировал запросы - удобно отлаживать
     
  9. In_The_Real

    In_The_Real Новичок

    С нами с:
    11 июл 2014
    Сообщения:
    26
    Симпатии:
    0
    Спасибо
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    стоит, если они добавляют удобства ) например:
    - в mysql/mysqli нет метода получить все строки разом в массив (в PDO есть такое). моя обертка предоставляет метод fetchAssocAll().
    - хотя и в mysqli и в PDO есть плейхсхолдеры, они не позволяют, например, работать с "префиксом таблиц", т.е. когда часть имени задана в конфигурации приложения. я себе такое добавил …FROM `:p_users` AS u.
    - массивы для подстановки в …WHERE `id` IN:)ids)
    и т.д. кто-то типизованные плейсхолдеры делает — тоже здравый подход.
    ну и оболочка это новый уровень абстракции, чтобы можно было прозрачно выбирать расширение не переписывая весь код.
     
  11. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Есть, начиная с php 5.3: http://php.ru/manual/mysqli-result.fetch-all.html
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    спасибо!

    Добавлено спустя 1 минуту 3 секунды:
    настораживает замечание:
    я, честно говоря, не хотел бы проверять используется nd или нет.