Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dziedziczenie w klasach
Forum PHP.pl > Forum > Przedszkole
sebekzosw
Witam,

mam klasę MySQL, składa się z konstruktora i dekonstruktora, który zamyka połączenie z mysql - mysql_close()

tworzę klasę Users która dziedziczy metody z klasy MySQL

  1. class Users extends MySQL
  2. {
  3. function ok()
  4. {
  5. return 'ok';
  6. }
  7. }


po uruchomieniu skryptu wyskakuje błąd:


Warning: mysql_close(): no MySQL-Link resource supplied in class\MySQL\class.mysql.php on line 242

gdzie 242 linijka to

  1. return mysql_close();



cała metoda:

  1. public function __destruct()
  2. {
  3. if($this->connection)
  4. {
  5. $this->connection = false;
  6. return mysql_close();
  7. }
  8. }


Dlaczego taki błąd występuje?
viking
Zobacz pierwszy z brzegu komentarz do mysql_close, PHP 5.3? A w ogóle trochę nie widzę sensu takiego tworzenia klasy. Dlaczego klasa użytkownika jest zwiazana bezpośrednio z mysql?
sebekzosw
próbowałem tego też, ale wtedy pokazuje się błąd:

Warning: mysql_close(): 24 is not a valid MySQL-Link resource in


Dlaczego błędem jest wiązanie klasy użytkownika z mysql, jeżeli ta klasa ma np dodawać / edytować i usuwać użytkowników?
Rysh
Cytat(sebekzosw @ 17.03.2012, 11:30:28 ) *
próbowałem tego też, ale wtedy pokazuje się błąd:

Warning: mysql_close(): 24 is not a valid MySQL-Link resource in


Dlaczego błędem jest wiązanie klasy użytkownika z mysql, jeżeli ta klasa ma np dodawać / edytować i usuwać użytkowników?

Nie lepiej Ci się zainteresować PDO niż męczyć się dalej z mysql? Nauki niedużo, a efekty widoczne.
nospor
  1. public function __destruct()
  2. {
  3. if($this->connection)
  4. {
  5. var_dump($this->connection);
  6. mysql_close($this->connection);
  7. $this->connection = false;
  8. }
  9. }


Cytat
Dlaczego błędem jest wiązanie klasy użytkownika z mysql, jeżeli ta klasa ma np dodawać / edytować i usuwać użytkowników?
To są podstawy dziedziczenia.... poszukaj w necie o dziedziczeniu, pełno tego po polsku jest.
sebekzosw
var_dump zwrócił mi resource(24) of type (mysql link) resource(24) of type (Unknown), ale nic mi to nie mówi


co do dziedziczenia klas - zapoznam się z książką która leży mi w szafce i w razie wątpliwości odezwę się
nospor
Widać w takim razie, że dwukrotnie wywołujesz ten destruktor. Totalnie bezsensu. Destruktor połączenia z bazą powinien być wywoływany raz, tak samo jak raz powinno być w ogóle tworzone połączenie z bazą.
sebekzosw
rzeczywiście... przeczytałem gdzieś na tym forum w jakimś temacie więc mały update:

  1. class Users
  2. {
  3. private $db;
  4. function __construct($db = '')
  5. {
  6. $this->db = $db;
  7. }
  8.  
  9. function ok()
  10. {
  11. print_r($this->db->fetchAssoc("SELECT * FROM `all_cms_settings`"));
  12. }
  13. }


i w głównym pliku

  1. require DOCUMENT_ROOT.'/class/MySQL/class.mysql.php';
  2. $sql = new MySQL;
  3.  
  4. require DOCUMENT_ROOT.'/class/MySQL/class.users.php';
  5. $users = new Users($sql);
  6. $users->ok();



może być takie rozwiązanie?
nospor
Zdecydowanie lepiej

ps:
require DOCUMENT_ROOT.'/class/MySQL/class.users.php';
Tylko wywal usera z katalogu mysql. Jedno z drugim nie ma żadnego związku
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.