Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Call to a non-object
Forum PHP.pl > Forum > Przedszkole
c4ash
Chyba potrzebuje małej pomocy..
Staram się ogarnąć trochę OOP i coś mi jednak nie idzie.

Mam plik gdzie trzymam wszystkie funkcje, w tym:
  1. function db_connect() {
  2. $DBHOST = '...';
  3. $DBUSER = '...';
  4. $DBPASS = '...';
  5. $DBNAME = '...';
  6.  
  7. $conn = new mysqli($DBHOST, $DBUSER, $DBPASS, $DBNAME);
  8. // Check connection
  9. if ($conn->connect_error) {
  10. die("Connection failed: " . $conn->connect_error);
  11. }
  12.  
  13. }


W tym samym pliku jest
  1. function db_close() {
  2. $conn->close();
  3. }


W index.php gdzie wywoluje te funkcje, wywala Call to a member function close() on a non-object

W innych plikach, gdzie wywoluje w podobny sposob np zapis do bazy
  1. $result = $conn->query($sql);

wywala identyczny blad.

Czy zatem przy kazdym wywolaniu zapytanie mam na nowo tworzyc takie polaczenie? Czy cos ominalem?,
Z gory dziekuje za pomoc.
kapslokk
Przeczytaj sobie: http://php.net/manual/pl/language.variables.scope.php
Ogólnie to jeśli zmienną tworzysz w funkcji to poza nią nie będzie widoczna.
Swoją drogą kod, który piszesz nijak się ma do OOP, bo z obiektowości to tam jest tylko obiekt mysqli.
c4ash
Dzieki za nakierowanie. Czyli jesli do funkcji dodam global to powinno byc ok, zgada sie?

Cytat(kapslokk @ 22.01.2016, 23:14:26 ) *
Swoją drogą kod, który piszesz nijak się ma do OOP, bo z obiektowości to tam jest tylko obiekt mysqli.

Prawde mowiac, przerabiam sobie stary skrypt wg. wskazan w3schools, ze sposobu zatytuowanego "Example (MySQLi Object-oriented)", liczylem wiec, ze troche sie zblize do obiektowosci. Wynika jednak z tego, ze jest do d... ten "kurs".

Aby zblizyc sie do obiektowosci, musze zaczac robic klasy, same funkcje to za malo, zgadza sie?
kapslokk
Cytat
Dzieki za nakierowanie. Czyli jesli do funkcji dodam global to powinno byc ok, zgada sie?

Zgadza się, będzie działało, ale to nie jest dobre rozwiązanie. Poczytaj o Dependecy Injection jeśli chcesz to zrobić obiektowo:)

Cytat
Prawde mowiac, przerabiam sobie stary skrypt wg. wskazan w3schools, ze sposobu zatytuowanego "Example (MySQLi Object-oriented)", liczylem wiec, ze troche sie zblize do obiektowosci. Wynika jednak z tego, ze jest do d... ten "kurs".

Link, który podałeś to tylko informacja na temat użycia obiektu mysqli.

Cytat
Aby zblizyc sie do obiektowosci, musze zaczac robic klasy, same funkcje to za malo, zgadza sie?

No tak, funkcje to nadal programowanie strukturalne.
c4ash
Podziekowac.
W takim razie musze sie przylozyc bardziej za ten temat.
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.