Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odwołanie się do funkcji klasy w innej funkcji
Forum PHP.pl > Forum > PHP > Object-oriented programming
InosU31
Witam

Mam taką klasę:

  1. class db_interface
  2. {
  3. var $resource;
  4. var $result;
  5.  
  6. function db_interface($_db_base, $_host, $_user, $_pswd)
  7. {
  8. $this->resource = mysql_connect($_host, $_user, $_pswd) or die ("brak polaczenia z baza");
  9. mysql_select_db($_db_base) or die ("nie znaleziono bazy danych");
  10. }
  11.  
  12.  
  13. function get_query ($_query)
  14. {
  15. $this->result = mysql_query ($_query) or die ("blad zapytania");
  16.  
  17. $i = 0;
  18. while ($record = mysql_fetch_array ($this->result, MYSQL_ASSOC))
  19. {
  20. foreach ($record as $field_name => $field_value)
  21. {
  22. $table [$i][$field_name] = $field_value;
  23. }
  24. $i++;
  25. }
  26.  
  27. mysql_free_result ($this->result);
  28.  
  29. if ($i == 0)
  30. return 0;
  31. else
  32. return $table;
  33.  
  34. }
  35.  
  36.  
  37. }


chciałem sobie stworzyć funkcję, która będzie mi zapisywała pewne dane do bazy - ponieważ użyję ją w kilku miejscach. Problem w tym że nie wiem jak mam sie odwołać do funkcji w klasie db_interface w tej funkcji:

  1.  
  2. function statyProm ($statyTabela, $nazwaTabeli, $idTabela, $getUser, $getId)
  3. {
  4. $result_staty_promo = $dbase->get_query(" // tu jest linia 5
  5. SELECT * FROM $statyTabela
  6. WHERE id_user = '".$getUser."' AND id_promo = '".$getId."'
  7. ");
  8.  
  9. if ($result_staty_promo)
  10. {
  11. foreach ($result_staty_promo as $record_staty_promo)
  12. {
  13. if ($record_staty_promo['ip'] == $_SERVER['REMOTE_ADDR'] AND $record_staty_promo['browser'] == $_SERVER['HTTP_USER_AGENT'])
  14. {
  15. return 0;
  16. }
  17. else
  18. {
  19. $dbase->query("
  20. INSERT INTO $statyTabela
  21. (ip, browser,id_user, id_promo)
  22. VALUES
  23. (
  24. '".$_SERVER['REMOTE_ADDR']."',
  25. '".$_SERVER['HTTP_USER_AGENT']."',
  26. '".$getUser."',
  27. '".$getId."'
  28. )
  29. ");
  30.  
  31. $dbase->query("
  32. UPDATE $nazwaTabeli
  33. SET ilosc_klik = ilosc_klik + 1
  34. WHERE $idTabela = '".getId."'
  35. ");
  36.  
  37. echo "funkcja dziala :-)";
  38. }
  39. }
  40. }
  41. }


includuję wcześniej dostęp do bazy:
$dbase = new db_interface("nazwa_bazy", "localhost", "user", "hasło");

dodam że jak normalnie się odwołuję do tych instrukcji z funkcji statyProm to wszystko jest ok ale jak wywołuje ta funkcję to wywala mi bład.

  1. statyProm ("tabela1", "tabela2", "id_tabela2", $_GET['us'], $_GET['prid']);


a bład wygląda tak:

Fatal error: Call to a member function get_query() on a non-object in E:\sciezka\funkcje.php on line 5

z góry dzieki za pomoc

Pozdrawiam

Pyton_000
A słyszał o zasięgu zmiennych ?
i nie "db_interface(...)" a __construct...)
InosU31
Cytat(Pyton_000 @ 3.02.2016, 23:41:38 ) *
A słyszał o zasięgu zmiennych ?
i nie "db_interface(...)" a __construct...)



słyszał ale że uczyłem się tego dwa lub 3 lata temu i tego do tej pory nie używałem w ostatnim czasie to już pozapominałem... chyba będę musiał sobie przerobić lekcje z klasami jeszcze raz bo rozwiązania znalezione nawet na tym forum nie działają dlatego napisałem swojego posta.

dzięki za info z __construct ;-)

tą klase tworzyłem dawno jak nie było jeszcze php5 ;-)

pozdrawiam
Rysh
Warto poczytać też w takiej sytuacji o singletonie, aby nie tworzyć za każdym razem nowego połączenia z bazą danych a korzystać już z nawiązanego.

przepraszam za odkopanie tematu z przed miesiąca
hind
@Rysh nie warto czytać o singletonie, lepiej od razu o DI/IoC
Dejmien_85
Ej, chłopaki, łapmy gościa, weźmiemy go do muzeum - oto programista PHP 4!

Dowody:
- używa "var" dla składowych klasy,
- w konstruktorze używa nazwy klasy,
- używa dawnych zasad dotyczących nazewnictwa (wszystko z małych liter + snake_case),
- o mysql_query nie muszę wspominać? : D

Łapać go! Dostaniemy za niego dużo siana! ; )

A tak na poważnie - kolego, nie wiem z jakiej książki się uczysz, albo z jakiego tutoriala, ale koniecznie potrzebujesz aktualnej literatury, bo co tutaj napisałeś to PHP, którego używało się wieki temu, naprawdę.
LowiczakPL
Temat stary ale odpowiadam dla przyszłych pokoleń jak to się robiło.

Jeśli chcesz użyć klasy db_interface w funkcji statyProm() to musisz przekazać w parametrze jej obiekt, ale wcześniej musisz stworzyć instancję klasy tworząc jej obiekt

$dbase = new db_interface();

function statyProm ($statyTabela, $nazwaTabeli, $idTabela, $getUser, $getId, $dbase){
...
}
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-2024 Invision Power Services, Inc.