Правильно сделать ООП

194
25 июня 2018, 02:20

Привык к процедурному стилю, сейчас со скрежетом перехожу на ООП, помогите. Правильно ли я написал код так все работает, но мне кажется нужно как то по другому, суть такая, регистрация пользователя с проверкой и хешированием пароля.

Сначала хеширование пробовал в конструктор занести, но потом передумал, сделал все в один метод. В общем помогите кто чем может, только если критика то можно конкретно, а не "твой говнокод я смотреть не стану" вот сам класс

class Registration extends SqlQuery
{
    public function newArray($arr)
    {
         $end = end($arr); // извлекаю сам пароль        
         $options = [
             'cost' => 11,
         ];
         $hash = password_hash($end, PASSWORD_BCRYPT, $options); // создаю хеш пароля
         $new_array = array('email' => '', 'status' => '');
         $new_array = array_intersect_key($arr, $new_array);// убираю пароли из старого массива
         $hash =['password'=>$hash];
         $result = array_merge ($new_array, $hash);// создаю новый массив
         $email = $result["email"];  // извлекаю емаил 
         $sql="SELECT COUNT(id) AS id FROM ce_members WHERE `email`='".$email."'"; // проверяю нет ли такого пользователя
         $checkMember = DB::run($sql);
         $res = $checkMember->fetch();
         if($res["id"] > 0){
             $result = ['status' => 666]; 
             return $result;
        }
        else {
             return $result;
        }
    }
}

вот класс SqlQuery

<?php
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

require_once ($_SERVER['DOCUMENT_ROOT'] . '/backEnd/controller/DB.php');
class SqlQuery {
    public function InsertText($array, $nameTable) {
        // build query...
        $sql = "INSERT INTO " . $nameTable;
        // implode keys of $array...
        $sql .= " (`" . implode("`, `", array_keys($array)) . "`)";
        // implode values of $array...
        $sql .= " VALUES ('" . implode("', '", $array) . "') ";
        $stmt = DB::run($sql);
        $e = DB::lastInsertId();
        return $e;
    }
    public function UpdateText($array, $id, $nameTable, $tableImg) {// 1 - array with data $_POST. 2 - id by object. 3 Table by data text. 4 3 Table by data image
        $search = "SELECT `name` FROM ".$tableImg." WHERE `idParent`='".$id."'";
        $searchX = DB::run($search);
        foreach ($searchX as $file) {
           unlink($file["name"]);
        }


        $delSql = "DELETE FROM ".$tableImg." WHERE `idParent`='".$id."'";
        $delRes = DB::run($delSql);
        // build query...
        $arrVal = $array;
        $arrKey = array_keys($array);

        $all = [];
        foreach ($arrKey as $key => $val) {
            $all[] = "`" . $arrKey[$key] . "` = '" . $arrVal[$val] . "'";
        }
        $allStrong = implode(",", $all);
        $sql = "UPDATE " . $nameTable . " SET";
        $sql .= $allStrong;
        $sql .= " WHERE `id`='" . $id . "'";
        $stmt = DB::run($sql);

    }
    public function ImageInsert($id, $theName, $tableImg){
        $today = date("Y/m");
        $path =  '/backEnd/view/cms/image/' . $today;
        if (!file_exists($_SERVER['DOCUMENT_ROOT']."/".$path)) {    // проверяем если такого пути нет, то создаём новый
            mkdir($_SERVER['DOCUMENT_ROOT']."/".$path, 0755, true); // новый калог с правами 
        }
        $help = $_SERVER['DOCUMENT_ROOT'];
        foreach ($_FILES[$theName]["error"] as $key_objectNewBuilds => $error_objectNewBuilds) {
            if ($error_objectNewBuilds == UPLOAD_ERR_OK) {
                $tmp_name_objectNewBuilds = $_FILES[$theName]["tmp_name"][$key_objectNewBuilds];
                // basename() может спасти от атак на файловую систему;
                // может понадобиться дополнительная проверка/очистка имени файла
                $original_name_objectNewBuilds = basename($_FILES[$theName]["name"][$key_objectNewBuilds]);
                //Получить расширение файла
                $extension_objectNewBuilds = pathinfo($original_name_objectNewBuilds, PATHINFO_EXTENSION);
                //Придумать новое имя файла с расширением загружаемого файла
                $new_name_objectNewBuilds = uniqid() . '.' . $extension_objectNewBuilds;
                move_uploaded_file($tmp_name_objectNewBuilds, "$help/$path/$new_name_objectNewBuilds");
                $name = $path . '/' . $new_name_objectNewBuilds;
                $prewSqlImg = "INSERT INTO ".$tableImg." (`idParent`, `name`) VALUES ('".$id."', '".$name."')";
                $stmt3 = DB::run($prewSqlImg);
            }
        }
    }
}

поля это данные POST запроса ключ=>значение

ключ всегда совпадает с столбцом в бд, а значение просто влетает в соответствующий столбец, по такому принципу строится этот класс.

DB это отсюда взял http://phpfaq.ru/pdo/pdo_wrapper там подключение к бд и запрос помогает сокращать

Answer 1

Позволю себе заметить, что использование ООП или любого другого стиля программирования без четкого понимания выгоды приводят к такого рода сомнениям. Именно практическая выгода решений должна быть мерилом правильности, а не соответствие чьим-либо рекомендациям. Людям свойственно ошибаться. Правильный код или нет, это каждый решает для себя самостоятельно исходя из поставленных задач и накопленного опыта.

На вашем месте я бы поработал с образом объектно ориентированного искусства - Yii2 фремворком (или Laravel, или Symphony).

Так вам легче будет "пощупать" преимущества и вы поймете их на уровне опыта, а не на уровне соблюдения магических ритуалов. И в итоге сможете самостоятельно отличать "хороший" код от "плохого".

READ ALSO
Долго выгружаются данные в из HTML в PDF

Долго выгружаются данные в из HTML в PDF

Есть необходимость реализовать конвертор из HTML в PDF продукцииВсе настроено все реализовано, но есть проблема, 25 страниц конвертируется за 75 секунд,...

211
Ошибка php Use of undefined constant

Ошибка php Use of undefined constant

Ребят помогите пожалуйста ошибку выдает)))

218
Retrofit android

Retrofit android

У меня есть два вопроса которые я не понял в этой библиотекепервый вопрос

232