• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Database PHP OOP

VPS Starter Arubacloud
0 głosów
178 wizyt
pytanie zadane 4 czerwca 2017 w PHP przez Justyna Obywatel (1,210 p.)

Hej, jeśli tworzę jakikolwiek projekt obiektowo to wszelkie zapytania do bazy (dodawanie user, komentarzy, ocena) powinnam wywoływać z klasy database.php?

Jeśli mam:

<?php
	class Database
	{
	     
	    private static $cont  = null;
	     
	    public function __construct() {
	        die('Init function is not allowed');
	    }
	     
	    public static function connect()
	    {
	       // One connection through whole application
	       if ( null == self::$cont )
	       {     
	        try
	        {
	          self::$cont =  new PDO('mysql:host=localhost;dbname=baza;encoding=utf8', 'root','');
	        }
	        catch(PDOException $e)
	        {
	          die($e->getMessage()); 
	        }
	       }
	       return self::$cont;
	    }
	     
	    public static function disconnect()
	    {
	        self::$cont = null;
	    }
	}
?>

I chce dodać np funkcje addUser, to powinno to wygladać tak?:

<?php
	class Database
	{
	    private $pdo;
		 
	    private static $cont  = null;
	     
	    public function __construct() {
	        die('Init function is not allowed');
	    }
	     
	    public static function connect()
	    {
	       // One connection through whole application
	       if ( null == self::$cont )
	       {     
	        try
	        {
	          self::$cont =  new PDO('mysql:host=localhost;dbname=baza ;encoding=utf8', 'root','');
	        }
	        catch(PDOException $e)
	        {
	          die($e->getMessage()); 
	        }
	       }
	       return self::$cont;
	    }
	     
		 public function addUser() {
			this->connect();
			$stmt = $this->pdo->prepare("INSERT INTO $this->table (Name, Category, Price) VALUES (:name, :category, :price)");
            $stmt->bindParam(':name', $name);
            $stmt->bindParam(':category', $category);
            $stmt->bindParam(':price', $price);
            $stmt->execute();
		 }
		 
	    public static function disconnect()
	    {
	        self::$cont = null;
	    }
	}
?>

Wytłumaczy mi ktoś dobrze jak to robić, żeby już od początku nauki z tym dobrze robić?

2 odpowiedzi

+2 głosów
odpowiedź 4 czerwca 2017 przez Boshi VIP (100,240 p.)
Ale co ma addUser (już pomijam, że Add sugeruje dodanie do kolekcji użytkowników) do bazy danych?  Tworzenie klasy database do połączenia jest bezużyteczne. Tak samo tworzenie metod typu fetch itd,. bo to tylko opakowywanie jedengo pudełka w durgie.. chyba, że piszesz jakiś queryBuilder zwracający instancję samego siebie to wtedy jako tako ma to sens.. np

Taki trochę activeRecord

$query=(new Query())->select('')->from('')->where([condition=>])->find($id)
komentarz 4 czerwca 2017 przez efiku Szeryf (75,160 p.)
Ba! Widzę, że jest static ;) Justyna, no nie czytasz materiałów które Ci podajemy. Niestety, nic więcej nie da się zrobić.

https://stackoverflow.com/a/2553910
komentarz 4 czerwca 2017 przez Justyna Obywatel (1,210 p.)

Ale to był przykład, skrytykowałeś tylko, a mi chodzi o wyjaśnienie w takim razie jak to zrobić w przypadku dodawanie usera do bazy, skoro nie robienie funkcji w klasie database, więc funkcja ma byc w klasie User ? i tam mam zrobić cos takiego? (nie zwracać uwagę na kod w funkcji tego co robi a o same zapytanie):

          
         public function addUser() {
            this->connect();
            $stmt = $this->pdo->prepare("INSERT INTO $this->table (Name, Category, Price) VALUES (:name, :category, :price)");
            $stmt->bindParam(':name', $name);
            $stmt->bindParam(':category', $category);
            $stmt->bindParam(':price', $price);
            $stmt->execute();
         }

 

komentarz 4 czerwca 2017 przez Boshi VIP (100,240 p.)
To nie użytkownik dodaje siebie do kolekcji a raczej jakieś repository. Tego nie da się opisać ot tak, to są miesiące i lata nauki OOP aby zrozumieć budowę architektury.

 

Jasne, możesz sobie tą metodę zrobić w klasie user, zrobić klasę database.. i będzie to działało, ale czystym i zrozumiałym kodem nikt tego nie nazwie i jako porfolio do pracy też bym tego unikał.
komentarz 4 czerwca 2017 przez Justyna Obywatel (1,210 p.)
A chociaz powiesz  w jak najlepszym sposobie to powinno wygladac/jak zrobic i tyle?

 

i drugie pytanie czyli ta klasa database.php poczatkowa bez funkcji to w takim przypadku jej wgl nei ruszac nie modyfikowac a tylko wywolywac tak?
0 głosów
odpowiedź 4 czerwca 2017 przez manjaro Nałogowiec (37,390 p.)

Polecam ten tutorial. Łatwo prosto i przyjemnie.

komentarz 4 czerwca 2017 przez Justyna Obywatel (1,210 p.)
fajny ale ten sposób już znam, a chciałam fajny motyw na obiektowym przykładzie :)

Podobne pytania

0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 5 grudnia 2018 w PHP przez s4bek Użytkownik (600 p.)
0 głosów
0 odpowiedzi 103 wizyt
pytanie zadane 11 grudnia 2018 w PHP przez s4bek Użytkownik (600 p.)
+1 głos
1 odpowiedź 177 wizyt
pytanie zadane 11 lutego 2022 w PHP przez ZnaQu Nowicjusz (130 p.)

92,417 zapytań

141,222 odpowiedzi

318,983 komentarzy

61,831 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...