Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Object-oriented programming _ Dziedziczenie klas a wiele instancji

Napisany przez: piotr94 17.10.2013, 23:12:56

Witajcie!
Mam taką sytuację:

  1. class http://www.php.net/mysql{
  2. //tu zdefiniowane zmienne prywatne przechowujące m. in uchwyt połączenia
  3. //i wszystkie operacje na bazie także odwołujące się do tego uchwytu połączenia
  4. //w tym mysql_select_db();
  5. }
  6. class A extends http://www.php.net/mysql{
  7. //jakieś funkcje charakterystyczne dla tego zestawu odwołań
  8. }
  9.  
  10. class B extends http://www.php.net/mysql{
  11. //jakieś funkcje charakterystyczne dla tego zestawu odwołań
  12. }
  13.  
  14. $db1 = new A;
  15. $db2 = new B;


I w teorii moich przewidywań wszystko ślicznie - mam 2 połączenia z bazami danych (gdzie funkcje podstawowe zapewnia klasa mysql) i mogę się niezależnie do nich odwoływać.
Jednak efekt mnie nieco zaskoczył. W rzeczywistości odwołania do obiektu A (po takiej deklaracji) powodują korzystanie z połączenia ustanowionego przez konstruktor obiektu B... Tak jakby była tworzona tylko jedna instancja klasy mysql...
Bardzo proszę o pomoc i wyjaśnienie przyczyny takiego zachowania...

Z góry dziękuję za pomoc.
Pozdrawiam
PR

Napisany przez: vermis 17.10.2013, 23:24:50

Nie wiem jak wygląda samo połączenie. Jeśli używasz mysql_connect to daj 4 parametr na true co wymusza ustanowienie nowego identyfikatora połączenia, w przypadku, gdy oba korzystają z tych samych argumentów. Rzuć okiem http://php.net/manual/en/function.mysql-connect.php
W przypadku, gdy łączysz się z dwiema bazami na tym samym serwerze Twój opis wskazuje że działa poprawnie, czyli korzysta z jednego połączenia.

Napisany przez: piotr94 17.10.2013, 23:28:23

Dzięki za naprowadzenie - strzał w 10 - śmiga teraz jak należy (na razie rzeczywiście testuję na tym samym serwerze - docelowo będą 3 serwery).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)