Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] odwołanie się do innej klasy
Forum PHP.pl > Forum > Przedszkole
Skie
Mam taki problem:

używam ADOdb Lite do połączeń z bazą danych MySQL (ze względu na szybkość działania). Rozpoczynam połączenie poprzez
Kod
$db = NewADOConnection('mysql');


(resztę kongifuracji pomińmy)
a zapytania do bazy wykonuje poprzez:

Kod
$db -> Execute(OPERACJA);


I wszystko pięknie, ładnie tylko problem pojawia się przy OOP. Chcę mianowicie zrobić za pomocą klasy pewną operację, niestety nie wiem jak w klasie wykonać $db -> Execute();
Czy ktoś może mi to wytłumaczyć?
skowron-line
np.
  1. <?php
  2. class x {
  3. function __construct(){
  4. global $db;
  5. }
  6. }
  7. ?>
Skie
Tak, właśnie o to mi chodziło - dzięki - Plusik dla Ciebie (ten z 'pomógł') winksmiley.jpg
mike
~skowron-line podałeś najgorsze rozwiązanie jakie mogłeś podać. Zgodnie z OOP powinno byc raczej:
  1. <?php
  2.  
  3. class Klasa {
  4. private $db;
  5.  
  6. public function __construct($db) {
  7. $this->db = $db;
  8. }
  9.  
  10. public function operacja() {
  11. $this->db->Execute("OPERACJA");
  12. }
  13. }
  14.  
  15. ?>


Tyle się mówi i edukuje na forum ale niektórzy nadal wolą karmić początkujących głupotami, które później trzeba plewić.

Poza tym: ~Skie wystarczyło wejść do działu Programowanie obiektowe i trafiłbyś na świeży (ósmy od góry) jeszcze wątek: [php]odwołanie się do funkcji z innej klasy. Znajome zagadnienie?
Skie
~mike: Nie do końca o to mi chodziło, gdyż Twój przykład nie działa. Natomiast zastanawia mnie fakt dlaczego poniższy kod nie działa:

Kod
function __construct() {
global $db;
}

function jakas_funkcja() {
    $db -> OPERACJA;
}


natomiast tak zapisane działa:

Kod
function jakas_funkcja() {
global $db;
$db -> OPERACJA;
}


PS. No rzeczywiście trochę źle ten temat umieściłem, gdyż nie zauważyłem poddziału dla OOP
dr_bonzo
Skie: zobacz czym sie rozni twoj kod od kodu mike'a, gdzie zgubiles klase i $this-> ?
mike
  1. <?php
  2.  
  3. $db = NewADOConnection('mysql');
  4.  
  5. $klasa = new Klasa($db);
  6. $klasa->operacja();
  7.  
  8. ?>

"Nie działa" nic nie oznacza. Jak masz pisać, że coś nie działa bez dodatkowego komentarza to nie pisz nic.

Poza tym jak przepisujesz gotowy kod i robisz błędy przy przepisywaniu to nie dziw się, że nie działa tongue.gif
Skie
Ehh...

Ale ten kod co ja tu napisałem był od siebie, a nie ten od mike. Pisałem to odnośnie innego zagadnienia, z pytaniem dlaczego ten akurat przykład nie działa.

Tak już wiem, co było źle. Zapomniałem wpisać $db przy tworzeniu nowego obiektu winksmiley.jpg
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.