cześć zrobiłem wcześniej skrypt PHP logowania do ssytemu chcę go teraz przerobić na obiektowy i zrobiłem połączenie z bazą danych:
<?php //DANE DO LOGOWANIA DO BD http://www.php.net/define("DB_HOST", 'localhost'); http://www.php.net/define("DB_USER", 'michal'); http://www.php.net/define("DB_PASSWORD", ''); http://www.php.net/define("DB_DATABSE", 'kurs_php'); ?> <?php //PLIK LOGOWANIA DO BD I SPRAWDZANIA POLACZENIA Z BD class dbConnect { function __construct() { require_once 'config.php'; $db_mysqli = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABSE); //$db_mysqli->query('SET NAMES utf8'); if (!$db_mysqli) { http://www.php.net/die('Błąd połączenia (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } else { http://www.php.net/echo '<font size="2px" color="red">Info: Połączono z bazą danych.</font><br />'; } } public function CloseDb() { mysqli_close(); } } ?>
<?php // KLASA Z FUNKCJAMI LOGOWANIE UŻYTKOWNIKA class Functions { function __construct() { // connecting to database $db_mysqli = new dbConnect(); } function __destruct() { } public function Login($login, $hasloSha1) { $result = $db_mysqli->prepare("SELECT haslo FROM uzytkownicy WHERE login=? AND haslo=?"); $result->bind_param('ss', $login, $hasloSha1); $result->execute(); $result->store_result(); $row = mysqli_fetch_assoc($result); $kodAktywowany = $row['kod']; //sprawdzenie czy taki uzytkownik istnieje if ($result->num_rows == 1) { $_SESSION['logowanie'] = $login; return TRUE; } else { return FALSE; } } } ?>
<?php $result = $db_mysqli->prepare("SELECT haslo FROM uzytkownicy WHERE login=? AND haslo=?"); ?>
<?php $func = new Functions(); if (http://www.php.net/isset($_POST['log_in'])) { if ($_POST['log_in']) { $login = mysqli_real_escape_string($db_mysqli, $_POST['login']); $haslo = mysqli_real_escape_string($db_mysqli, $_POST['pass']); $hasloSha1 = sha1($haslo); $user = $func->Login($login, $hasloSha1); if ($user == TRUE) { http://www.php.net/header("Location: panel.php"); } else { http://www.php.net/header("Location: index.php?error=4"); http://www.php.net/die(); } } } ?>
class dbConnect { public $db_mysqli; function __construct() { require_once 'config.php'; $this->db_mysqli = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABSE); (...) class Functions { public $db_mysqli; function __construct() { // connecting to database $this->db_mysqli = new dbConnect(); } function __destruct() { } public function Login($login, $hasloSha1) { $result = $this->db_mysqli->db_mysqli->prepare("SELECT haslo FROM uzytkownicy WHERE login=? AND haslo=?"); (....)
sazian ale public? naprawdę
class Functions { private $db_mysqli; function __construct($db) { $this->db_mysqli = $db; } function __destruct() { } public function Login($login, $hasloSha1) { $result = $this->db_mysqli->prepare("SELECT haslo FROM uzytkownicy WHERE login=? AND haslo=?"); (....)
require_once 'config.php'; // ew jakiś try catch $db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABSE); $functions = new Functions($db); $functions->Login(...);
Zrób z dbConnection singletona dziedziczącego po PDO. Nie będzie lepiej?
Później do Functions::Login przekaż tego singletona razem z danymi do logowania. Po co dawać go w całej Functions (no chyba, że logowanie to jej jedyna jej funkcja)
piotras
Singletona? Singleton to antywzorzec, czyli generalnie zły kod, lepiej stosować IoC i DI
Przez wielu ioc jest również uważany za antywzorzec.
Owszem np kiedy stosuję się service locator
@com
no spoko, ale co dokładnie sprawia, że użycie singletona w tej konkretnej sytuacji jest złym rozwiązaniem?
Singleton sprawia, że ta klasa staję się globalna, co generalnie nigdy nie jest dobre
Pisząc kod obiektowy chodzi o przekazywanie sobie nawzajem obiektów, od których dana funkcja/klasa jest zależna. Singleton jest zły, ponieważ zamiast przekazywać go, tworzysz go. Tworzysz przez to zależności wewnątrz obiektu, co jest trudne do przetestowania automatycznego.
Na początku singleton jest fajny. Bardzo długo go kochałem. @piotras przeczytaj sobie książkę Uncle Boba - Czysty Kod. Tam jest przedstawiony świetny model programowania obiektowego, który mimo że nie mówi że singleton jest zły, to z góry wyklucza go jako dobre rozwiązanie.
Tak, konkretnie polskie wydanie. Skarbnica wiedzy.
Oczywiście, polecam zakup. Ściąganie z neta piratów to brak szacunku do kolegów po fachu.
ok, dzięki
Wpisałem w google i wyskoczyło na pierwszym miejscu. Czytać i tak będę w wersji ksiązkowej
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)