@sagaton

Как переписать подключение к базе данных, по принципам ООП?

Есть 2 файла.
первый
$mysql= new Mysqli('localhost','root','','pizza');
if ($mysql->connect_error){die('Ошибка подключения' . $mysql->connect_error);}
$mysql->set_charset('UTF-8');


и второй

$select="SELECT * FROM pizza";
$article=mysqli_query($mysql, $select);
$rcount=mysqli_num_rows($article);


данные из базы выводятся так
<select id="single" class="form-control" name = '1234' >
                <option value="" disabled selected style='display:none;'>выберите тип</option>

                <?
                    while($object = mysqli_fetch_object($article)){?>
                   <option value = <?=$object->id?>><?=$object->name?> </option>

                    <?

                    }
?>
            </select>


Вопрос, в том, что это все написано без использования абстракций или классов. Но как это можно было переделать под принципы ООП?
Пытался по разному но каждый раз какие либо ошибки выбивала.
  • Вопрос задан
  • 318 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Никак.
Это не стёб и не троллинг. Это единственный возможный ответ на этот хороший, в сущности, вопрос.

ООП - это не картина, которую купил и на стенку повесил, для красоты.
Это инструмент для решения какой-либо задачи.
Если задачи нет, то и ООП применять не следует.

в данном случае перед ООП надо выучить куда более базовые вещи.
Например научиться применять готовые классы, такие как mysqli
узнать почему за использование @ программистам в аду льют кипяток на самые нежные части тела
выучить что exit('Ошибка подключения'); - это говнокод
ну и открыть для себя разделение логики работы с данными и логики отображения. То есть сначала получить все данные, а потом только выводить.

Эту страницу можно переписать в соответствии с принципами аккуратного кода

Сначала сделать файл config.php.
Этот файл можно будет исключить из системы контроля версий и таким образом иметь на каждом сервере свой

<?php
return [
    'db' => [
        'host' => '127.0.0.1',
        'port' => 3306,
        'db'   => 'pizza',
        'user' => 'root',
        'pass' => '',
        'charset' => 'utf8mb4',
    ]
];

потом сделать файл mysqli.php
Этот файл можно будет включать во все скрипты, которым нужно соединение с БД
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli(
    $config['db']['host'], 
    $config['db']['user'], 
    $config['db']['pass'], 
    $config['db']['db'], 
    $config['db']['port']
);
$db->set_charset($config['db']['charset']);
$db->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);


Потом сделать страницу pizza.tpl.php в которую поместить весь HTML
.
            <select id="single" class="form-control" name = '1234' >
                <option value="" disabled selected style='display:none;'>выберите тип</option>
                <?php foreach($types as $object): ?>
                    <option value ="<?=$object['id']?>"><?=$object['name']?></option>
                 <?php endforeach ?>
            </select>


И потом сделать страницу pizza.php на которой собрать это всё вместе
<?php
$config = require 'config.php';
require 'mysqli.php';

$sql="SELECT * FROM pizza";
$types=$db->query($sql)->fetch_all(MYSQLI_ASSOC);

include 'pizza.tpl.php';


После этого можно будет потихоньку приглядываться к ООП.
Например сделать класс pizzaModel
Но делать его будет иметь смысл только тогда, когда мы будем знать, какие еще действия с пиццей будет производить этот код
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Dier_Sergio_Great
@Dier_Sergio_Great
Увлеченный человек
Хороший код это когда его легко читать, понимать, и легко его продолжать писать.
В связи с огромными проектами программ, где количество кода не способен воспринять 1 человек. Были придуманы разные подходы. Самый популярный подход это ООП.
ООП служит для легкости восприятия кода одним человек!
Который не знает всей картины кода, но с легкостью может писать код своей задачи не нарушая читаемость, переносимость и прочее.
В разных задачах похожие объекты могут быть разными по подходу ООП.
Поэтому лучше всего изучать с использования готовых фреймворков и CMS.
В CMS Joomla, Вы как бы создавая расширение, просто описываете объект по аналогии с имеющиемся, попутно Вы увидите узлы, элементы, слои кода.
Быть может Вы уже наверно слышали подход MVC. Это тоже абстрактная сущность, обобщающая принципы.

В иных случаях код нужно писать кратчайшим путем. Ошибся, Во всех случаях, код нужно писать кратчайшим путем.
Ответ написан
Комментировать
DollyPapper
@DollyPapper
Откуда берется вся эта херотень про "принципы ООП". Нет никаких принципов ООП кроме 7-8 (в большинстве статей в интернете 4). Абстракция, инкапсуляция, полиморфизм и наследование. DRY, KISS, SOLIDы всякие и прочее и прочее это не принципы ООП, это принципы программирования вообще. ООП это надстройка над процедурщиной. Процедурщина абстрагировала логику в функции, ООП сказал - "давайте еще и данные абстрагируем". Так получились классы и объекты. То есть у нас имеются умные обьекты которые хранят в себе данные, хранят свое состояние, и показывают наружу интерфейс взаимодействия. Всё. Вот ваш ООП. Отсюда и не понимание - "а как переписать на ООП", потому что в интернете столько всякого дерьма, и каждый любой придуманный или услышанный им принцип называет "принцип ООП". Нет.
Это если с идеологической стороны подходить. А с практической FanatPHP правильно сказал - это инструмент который следует применять к месту. И это место - большие проекты где очевидна выгода от этого подхода. Начни с объектной декомпозиции. Гради Буча покури попробуй. То есть нужно сначала понять концепцию, а потом уже пытаться что-то написать в "стиле ООП". Иначе будут возникать вопросы на которые вы не ответите, типа - "А вот этот класс который я написал, это реально объект в понимании ООП или структура данных с обвязкой из процедур".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы