Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Używanie atrybutów jednej klasy w drugiej
Still
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 12.10.2010

Ostrzeżenie: (10%)
X----


Witam,
Programuję od jakiegoś roku, ale dopiero od około miesiąca zająłem się OOP i PDO. Mam problem z używaniem atrybutów jednej klasy w drugiej. Konkretniej:

klasa users, ma konstruktor iż pobiera z bazy danych na podstawie cookies (jeżeli są) informacje o użytkowniku takie jak login, adres avatara itp i zapisuje je do swoich atrybutów.

druga klasa wyświetlająca stronę, nazywa się strona. jest w niej funkcja jak wyświetl_początek() i wyświetla ona kod html z logiem, menu. jest też wyswietl_koniec() gdzie rysowana jest stopka.

potrzeba mi użyć w wyświetl_początek() tych pobranych z bazy danych informacji o użytkowniku. jak to rozwiązać?

Fragmenty kodu o jakie się rozchodzi:
  1. class Users
  2. {
  3. private $zalogowany;
  4.  
  5. public function __construct()
  6. {
  7. $this->sprawdz_zalogowanie();
  8. }
  9.  
  10.  
  11. public function sprawdz_zalogowanie()
  12. {
  13. try
  14. {
  15. if( isset($_COOKIE['userid']) && isset($_COOKIE['pass']) )
  16. {
  17. // przygotowanie szkieletu zapytania
  18. $stmt = MySQLDriver::$pdo -> prepare('SELECT * FROM `users` WHERE `id` = :id AND `haslo` = :pass LIMIT 1');
  19.  
  20. $stmt -> bindValue(':id', intval($_COOKIE['userid']), PDO::PARAM_INT);
  21. $stmt -> bindValue(':pass', $_COOKIE['pass'], PDO::PARAM_STR);
  22.  
  23. // wykonanie zapytania
  24. $stmt -> execute();
  25.  
  26. // jeżeli zwróci kogoś z takim id i hasłem
  27. if ($row = $stmt -> fetch(PDO::FETCH_ASSOC))
  28. {
  29. foreach ($row as $k => $v)
  30. {
  31. $this->$k = $v;
  32. }
  33. $stmt -> closeCursor();
  34.  
  35. $this->zalogowany = TRUE;
  36. }
  37. else
  38. {
  39. $this->zalogowany = FALSE;
  40. }
  41. }
  42. else {
  43. $this->zalogowany = FALSE;
  44. }
  45. }
  46. catch(PDOException $e)
  47. {
  48. echo 'Wystapil blad biblioteki PDO: ' . $e->getMessage();
  49. }
  50. }
  51. }


  1. class Strona
  2. {
  3. public $tytul_strony;
  4. public $keywords;
  5.  
  6. public function __construct()
  7. {
  8. MySQLDriver::connect();
  9. }
  10.  
  11. public function wyswietl_poczatek($user)
  12. {
  13. echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n".'<html xmlns="http://www.w3.org/1999/xhtml">'."\n";
  14. $this->wyswietl_head();
  15.  
  16. echo "<body>\n";
  17. ?>
  18. <div id="top">
  19. <a href="index.php"><img src="images/logo.png" width="445" height="160" alt="" /></a>
  20. <div id="logowanie">
  21. <img src="images/avatars/0.gif" hspace="10" style="float:left" alt="" />
  22. <span style="font-size:10px">Jesteś zalogowany jako:</span><br />
  23. <b><?php echo 'Gość'; ?></b>
  24. <span style="font-size:10px"><br /> Przejdź do profilu <br /> Wyloguj</span>
  25. </div>
  26. </div>
  27. <?php
  28. $this->wyswietl_topmenu();
  29. ?>
  30. <!-- treść główna serwisu -->
  31. <table width="1060" border="1" cellpadding="0" cellspacing="0" align="center">
  32. <tr>
  33. <td width="500" rowspan="2" valign="top" align="left">
  34. <!-- lewa główna kolumna -->
  35.  
  36. <!-- wyszukiwarka -->
  37. <?php $this->wyswietl_wyszukiwarka(); ?>
  38. <!-- / wyszukiwarka -->
  39. <?php
  40. }
  41. }


  1. class MySQLDriver
  2. {
  3. public static $pdo;
  4.  
  5. // Nawiązanie połączenia z bazą danych.
  6. public static function connect()
  7. {
  8. self::$pdo = new PDO('mysql:host=localhost;dbname=baza', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  9. self::$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. }
  11. }


index.php
  1. // załadowanie class
  2. include_once('../classes/mysqldriver.php');
  3. include_once('../classes/users.php');
  4. include_once('../classes/strona.php');
  5.  
  6. // tworzenie obiektów
  7. $strona = new Strona();
  8. $user = new Users();
  9.  
  10. $strona->wyswietl_poczatek();
  11.  
  12. //tutaj tresc danego dzialu
  13.  
  14. $strona->wyswietl_koniec();


Dziękuję za jakąkolwiek pomoc. Pozdrawiam.

PS. Ogólnie to dobrze zrobiłem tą obsługę bazy danych? W tym wypadku wykorzystałem static, ale nie chcę tego nadużywać.

Ten post edytował Still 12.10.2010, 21:49:56
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 07:50