Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasy i MySQL...
Forum PHP.pl > Forum > PHP
pirat
No więc mam plik powiedzmy klasa.php. Tam buduje sobie klase
:
  1. <?php
  2.  
  3. class Strona
  4. {
  5.  
  6. // atrybuty klasy Strona narazie nie ma to znaczenia
  7.  
  8. var $nazwastrony = &#092;"Jakiś Tytuł\"; //przykladowy atrybut
  9.  
  10. /*
  11.  operacje klasy Strona to tez narazie nie ma znaczenia daje tylko aby mozna bylo
  12. sie zorientowac jak mniej wiecej zbudowana jest klasa
  13. */
  14.  
  15. function WyswietlNaglowek()
  16. {
  17. echo &#092;"<title> $this->nazwastrony </title>n\";
  18. }
  19.  
  20. }
  21. ?>

No to chyba zrozumiale biggrin.gif.... teraz chciałbym powiedzmy przechowywac nazwe strony w bazie MySQL, zbudowalem odpowiednia tabele, lacze sie standardowo z baza, wykonuje zapytanie.... iii wlasnie co teraz jak to mniej wiecej zrobic aby przekazać wartość z bazy danych do wnętrza klasy.........Narazie mam tyle

  1. <?php
  2.  
  3. require(&#092;"funkcjedb.php\");
  4. lacz_db();
  5.  
  6. pobierz_config_dla_klasy() // odbywa się to za pomocą $wiersz = mysql_fetch_object($zapytanie);
  7.  
  8.  
  9.  
  10.  
  11. class Strona
  12. {
  13.  
  14. // atrybuty klasy Strona narazie nie ma to znaczenia
  15.  
  16. var $nazwastrony = &#092;"Jakiś Tytuł\"; //przykladowy atrybut
  17.  
  18. /*
  19.  operacje klasy Strona to tez narazie nie ma znaczenia daje tylko aby mozna bylo
  20. sie zorientowac jak mniej wiecej zbudowana jest klasa
  21. */
  22.  
  23. function WyswietlNaglowek()
  24. {
  25. echo &#092;"<title> $this->nazwastrony </title>n\";
  26. }
  27.  
  28. }
  29. ?>

W tabeli oczywiscie pole nazywa sie nazwastrony. Wartosc jest 'Jakiś Tytuł', chcialbym teraz aby umiescić je w klasie, co zrobić zamiast
Kod
var $nazwastrony = "Jakiś Tytuł";

i
Kod
   echo "<title> $this->nazwastrony </title>\n";


Jak wywołać tą wartość wewnątrz tej klasy, co nie robie wyświetla mi 'Parse error'
nie mam pojęcia jak to przekazać.....$this->nazwastrony tam miesci sie moja wartos ale nie mam do niej dostępu, POMOZCIE biggrin.gif
Dabroz
  1. <?php
  2.  
  3. echo 'bar bar foo foo '. ($this->zmienna).' nextfoo etc';
  4.  
  5. ?>



(zakladajac ze jest to funkcja skladowa klasy)

A poza tym, musisz zadeklarowac zmienna tego typu.

  1. <?php
  2.  
  3. $strona=new Strona();
  4. ?>
pirat
Właśnie sobie coś uświadomiłem ale nie do końca rozwiązałem problem bo.... tak jak napisalem
Cytat
pobierz_config_dla_klasy() // odbywa się to za pomocą $wiersz = mysql_fetch_object($zapytanie);


czyli dostep jest $wiersz->nazwa_strony

i działa to wewnątrz funkcji klasa.php... ale nie oto mi chodzi i z tym ze trzeba utworzyć objekt to też wiem bo wywolanie wyglada tak w pliku index.php


  1. <?php
  2.  
  3. require(&#092;"klasa/strona.php\");
  4.  
  5.  
  6. $stronaglowna = new Strona();
  7.  
  8. $stronaglowna->UstawZawartosc(&#092;"<a class=\"box\\">Witamy na STRONIE -></a>\"
  9. );
  10.  
  11. $stronaglowna->Wyswietl();
  12. ?>



ale co mi po tym ze tutaj dostane sie do tej zmiennej jesli ja chce ja wykorzystac jeszcze w klasa.php.... a mniej wiecej tak...


  1. <?php
  2.  
  3. class Strona
  4. {
  5.  
  6. // TUTAJ MA WEJŚĆ TEN GLOOPI MySQL
  7.  
  8. var $nazwastrony = &#092;"Jakiś Tytuł\"; //zamiast tego chyba cos w stylu var $wiersz->nazwastrony ale on tego nie rozumie
  9. /*
  10. a dostęp do tego wtedy będzie taki questionmark.gif?
  11. */
  12.  
  13. function WyswietlNaglowek()
  14. {
  15.  echo &#092;"<title> $this->wiersz </title>n\";
  16. }
  17.  
  18. }
  19. ?>

ale cos tu nie dziala.....

wpadłem na pomysl żeby wam to jeszcze raz przedstawić i narazie co zrobiłem nowego.... dokładniej....


index.php

  1. <?
  2. require(&#092;"klasa/strona.php\");
  3.  
  4.  
  5. $stronaglowna = new Strona();
  6.  
  7. $stronaglowna->UstawZawartosc(&#092;"<a class=\"box\\">Witamy na STRONIE -></a>\"
  8. );
  9.  
  10. $stronaglowna->UstawTytul($wiersz->nazwa_strony);
  11.  
  12.  
  13. ?>

strona.php (to jest klasa)
  1. <?php
  2.  
  3. require(&#092;"funkcjedb.php\");
  4. lacz_db();
  5.  
  6. pobierz_config_dla_klasy();
  7.  
  8. class Strona
  9. {
  10. function WyswietlTytul()
  11. {
  12. echo &#092;"<title> $this->tytul </title>n\";
  13. }
  14. }
  15. ?>

funkcjedb.php
  1. <?php
  2.  
  3. function pobierz_config_dla_klasy()
  4. {
  5. $zapytanie=&#092;"select * from config
  6. where id='1'&#092;"; 
  7.  
  8. $echozapytanie = mysql_query($zapytanie);
  9.  
  10.  
  11. global $wiersz;
  12.  
  13. $wiersz = mysql_fetch_object($echozapytanie);
  14. }
  15. ?>

Tak i w tej postaci DZIAŁA ŁADNIE oczywiście ale dostęp jest robiony poprzez $stronaglowna->UstawTytul($wiersz->nazwa_strony); w index.php a ja chciałbym uzyskać dostęp do owej zmiennej już w klasa.php.... i by miało to postać podobną do var $zmienna = "wartosc"; poprzez operacje w klasie tez dziala ale jest to klopotliwe jesli chodzi o wiekszy projekt... jak to mozna zrobic INACZEJ......

Pzdr!
rzseattle
Prosze o poprawne urzywanie BBCode. Jesli publikujemy kod php to wskazane jest zamieszczanie go w znacznikach [php]
pirat
Sry nie wiedzialem ze to tak przeszkadza, juz poprawilem.....
Dabroz
Zasadniczo masz dwie możliwości

a) deklarujesz zmienna z klasą bazy danych jako global w środku funkcji składowej innej klasy

b) przekazujesz to jako referencję
pirat
WOW... hmmm referencji chcialbym uniknac bo nie wiem jak to zaimplementowac potem do dalszej czesci projektu a ten pierwszy sposob... hmmm jak by to mniej wiecej wygladalo ? bo chyba troszke nie rozumiem :] jak to w srodku innej klasy, pozniej jakos dziedziczyc ? moglbys podac mniej wiecej konkretny przyklad?
Dabroz
Wersja a

  1. <?php
  2.  
  3. class Db
  4. {
  5.  
  6. var $foo;
  7.  
  8. function query($sql)
  9. {
  10. return $sql;
  11. }
  12. }
  13.  
  14. $db=new Db;
  15.  
  16. class Page
  17. {
  18.  
  19. function show()
  20. {
  21. global $db;
  22. echo 'Strona';
  23. echo $db->query('SELECT bar FROM foo');
  24. }
  25. }
  26.  
  27. $page=new Page;
  28. $page->show();
  29. ?>


wersja b

  1. <?php
  2.  
  3. class Db
  4. {
  5.  
  6. var $foo;
  7.  
  8. function query($sql)
  9. {
  10. return $sql;
  11. }
  12. }
  13.  
  14. $db=new Db;
  15.  
  16. class Page
  17. {
  18.  
  19. function show(&$db)
  20. {
  21. echo 'Strona';
  22. echo $db->query('SELECT bar FROM foo');
  23. }
  24. }
  25.  
  26. $page=new Page;
  27. $page->show($db);
  28. ?>
pirat
Kurde zadam prostsze pytanko biggrin.gif
Jak zrobic zeby z zewnetrznej zmiennej np :

$wiersz = mysql_fetch_object($echozapytanie); (ktora znajduje sie w jakiejs funkcji)

wsadzic wartosc do klasy.....
Dabroz
Możesz też bardziej "chamsko" to zrobić:

  1. <?php
  2. $wiersz = mysql_fetch_array($echozapytanie);
  3. $klasa->zmienna=$wiersz;
  4. ?>


Ale tak nie powinno się robić tongue.gif (dobra klasa powinna być hermetyczna)
pirat
No rozwiązałem to biggrin.gif.... dzięki za pomysł Dabroz exclamation.gif! wygląda to teraz tak i wszystko odbywa sie w obrębie 2 klas biggrin.gif

  1. <?php
  2.  
  3. require(&#092;"funkcjedb.php\");
  4. lacz_db();
  5.  
  6.  
  7. class Db
  8. {
  9.  
  10. function dbs()
  11.   {
  12.  
  13. $zapytanie=&#092;"select * from config
  14.                 where id='1'&#092;"; 
  15.                 
  16. $echozapytanie = mysql_query($zapytanie);
  17.  
  18.  
  19. global $wiersz;
  20.  
  21.   $wiersz = mysql_fetch_object($echozapytanie);
  22.  
  23.   }
  24.  
  25. }
  26.  
  27. class Strona
  28. {
  29.  
  30. function WyswietlTytul()
  31.   {
  32.  
  33. global $wiersz;
  34.   
  35. $strona=new Db;
  36. $strona->dbs();
  37.  
  38.  echo &#092;"<title> $wiersz->nazwa_strony </title>n\";
  39.  
  40.   }
  41.  
  42. }
  43.  
  44. ?>


Wywołanie oczywiście w index.php które juz podawałem. i DZIAŁA biggrin.gif ale nie dało mi to zasnąć przez noc tongue.gif.... co za koszmar biggrin.gif, jeszcze raz dzięki za naprowadzenie biggrin.gif

Ale rano Szybciutko się myśli jezus biggrin.gif Zapomniałem o globalce i można to jeszcze uproscić do naprawde wygodnego rezultatu biggrin.gif

  1. <?php
  2.  
  3. require(&#092;"funkcjedb.php\");
  4. lacz_db();
  5. pobierz_config_dla_klasy();
  6.  
  7. class Strona
  8. {
  9.  
  10.  function WyswietlTytul()
  11. {
  12.  
  13. global $wiersz; //TU JEST MÓJ BŁĄD
  14.  
  15. echo &#092;"<title> $wiersz->nazwa_strony </title>n\";
  16.  
  17. }
  18.  
  19. }
  20.  
  21. ?>


kurde zero kombinacji biggrin.gif i działa.... poprostu nie zrozumiałem sentencj globala o którym cały czas myślałem i w połowie zastosowałem..
Definicja funkcji z funkcjedb.php
  1. <?php
  2.  
  3.  
  4. function pobierz_config_dla_klasy()
  5. {
  6. $zapytanie=&#092;"select * from config
  7. where id='1'&#092;"; 
  8.  
  9. $echozapytanie = mysql_query($zapytanie);
  10.  
  11.  
  12. global $wiersz;
  13.  
  14. $wiersz = mysql_fetch_object($echozapytanie);
  15. }
  16.  
  17. ?>


tu jest to zrobione ale zapomniałem potem wskazać to w operacji klasy no głupi błąd ale znalazłem drugie rozwiązanie przy okacji odnajdywania zagapiostwa.... cóż rano o wiele lepiej się myśli biggrin.gif
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.