Pracuję nad przejściem do OOP w PHP. Mam objaśnienia do czytania na php.net, ale miałem nadzieję, że mogę tu uzyskać pewne konkretne odpowiedzi.Jak konstruować klasy w PHP
Próbowałem utworzyć następujący przykład ilustrujący moje pytanie. Załóżmy, że mam klasy "Baza danych", "Produkty" i "Użytkownicy" i chcę wyświetlać produkty, jeśli użytkownik ma do nich dostęp.
Dlatego nazywam klasę "Produkty" funkcją "showProducts()", która z kolei tworzy instancję klasy "Użytkownik", która tworzy instancję obiektu "Baza danych" i sprawdza poziom dostępu użytkowników.
Jeśli użytkownik ma dostęp, funkcja "showProducts()" tworzy kolejną instancję obiektu "Baza danych" i wysyła zapytanie do bazy danych.
class Database{
public function query(){
//runs query here
}
public function __construct() {
//sets up connection here
}
}
class User{
public function checkAccess(){
$db = new Database();
$db->query(//pass in query to check access)
//does stuff, then returns true or false
}
}
class Products{
public function showProducts(){
$user = new User();
if($user->checkAccess())
$db = new Database();
$db->query(//pass in query to get products)
}
}
Miałem nadzieję, że ktoś może zilustrować, jak to zrobić w odpowiedni sposób.
Chciałbym mieć jakąś klasę kontrolera, która tworzy jeden obiekt "Bazy danych", który jest dostępny dla wszystkich klas, które muszą uzyskać do niego dostęp, bez konieczności tworzenia wielu wystąpień obiektu "Baza danych". Chciałbym to samo z klasą użytkowników, więc istnieje jeden obiekt $ users, do którego wszystkie klasy mogą uzyskać dostęp, bez konieczności tworzenia nowego obiektu za każdym razem, gdy potrzebuję użyć czegoś w klasie "Użytkownik".
Przepraszam, jeśli moje pytanie nie jest jasne, iz góry dziękuję za wszelkie odpowiedzi !!
Dziękuję wszystkim za odpowiedzi!
Wielkie dzięki za odpowiedź!Więc gdybym miał inną klasę, która odwoływałaby się do klasy użytkownika, również przekazałbym obiekt $ user jako parametr? – Ben
Tak, możesz! Możesz przekazać tyle klas, ile chcesz. Możesz przekazać obiekt przez konstruktor, jeśli obiekt naprawdę potrzebuje tego obiektu do działania. I możesz przekazać to za pomocą metody ustawiającej, jeśli obiekt jest opcjonalny. Gdy otrzymasz skomplikowane zależności, możesz pomyśleć o użyciu Dependency Injection Container, w którym opisujesz zależności, a Container będzie w stanie zebrać obiekt z innych obiektów i zwróci go Tobie :) Więcej na temat Dependency Injection and Dependency Injection Container możesz przeczytać tutaj : http://fabien.potencier.org/article/12/do-you-need-a-dependency-injection-container – otporan