![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam klasę do obsługi bazy mysql. Zwykle zapytanie wykonuje w ten sposób $sql -> sql_query('zapytanie'); Ostatnio jednak chciałem napisać sobie klase 'user', w której byłaby m.in. metoda dodająca uzytkownika do bazy. Dlatego chciałem się zapytać w jaki sposób mam odwoływać się do metody sql_query() wewnątrz klasy 'user'? Gdy normalnie chcę się odwołać do obiektu wewnątrz metody
pojawiają się błędy Kod Notice: Undefined variable: sql in c:\usr\krasnal\www\proba\index.php on line 17 Fatal error: Call to a member function sql_query() on a non-object in c:\usr\krasnal\www\proba\index.php on line 17 Z góry dziękuje za pomoc ![]() |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
A wiesz co to zasięg zmiennych?
$sql to zmienna globalna, a w funkcji używasz zmiennej lokalnej metody, która ma wartość null Dodaj na początku funkcji:
A na przyszłość zainteresuj się ustawianiem właściwościami obiektów. np. przy konstrukcji. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków ![]() |
global nie bardzo, nie powinno się go używać w klasach, przerzuć sobie $sql przez parametr.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za podpowiedzi.
global nie działa, wyrzuca błędy, próbowałem już tego wcześniej. Pomysł z parametrem działa i pewnie będe go musiał wykorzystać jeśli nie wymyśle nic lepszego. Chodzi mi przede wszystkim o to, że będe musiał pamiętać, aby do każdego wywołania funkcji dodać jeszcze jeden parametr. To może być niezbyt przyjemne, a po to właśnie ucze sie OOP, żeby mi było lżej ![]() Próbowałem w ten sposób: ($sql jest obiektem klasy do obsługi mysql)
Ale oczywiście nie działa. $this -> obiekt; zwraca Object id #1 natomiast $this -> $obiekt -> sql_query('SELECT * FROM config'); lub $obiekt -> sql_query('SELECT * FROM config'); powoduje błąd: Fatal error: Call to a member function sql_query() on a non-object in c:\usr\krasnal\www\proba\index.php on line 21 Proszę jeszcze o pomoc. Jak wy rozwiązujecie to w swoich projetkach? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zdecyduj się.
Piszesz w PHP5 to wywal tą referencję. Piszesz w PHP4 wywal public. A w jednym i drugim wywal $ sprzed obiekt
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje bardzo. Na prawde bardzo mi pomogliście
![]() Nie wiedziałem że w PHP5 nie można używać referencji do obiektów. Czy to znaczy, że parser sam wybierze, że to ma być referencja czy skopiuje cały obiekt? //to pytanie już czysto teoretyczne, po prostu chce wiedzieć ![]() Ten post edytował konrad13 11.11.2006, 11:36:46 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 27.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
sam robi referencję, gdy przekazujesz obiekt.
natomiast odnośnie twojego problemu ja bym zrobił z obiektu sql singleton'a. Na stronie głównej nie tak dawno był tekst o tym, na wikipedii też jest o tym wzorcu sporo. Trick polega na tym, że właściwy obiekt jest ukryty w statycznym polu singletona. Konstruktor singletona jest prywatny, więc przez operator new nie stworzysz nowego obiektu, możesz tylko odzyskać (lub stworzyć) obiekt docelowy. zawile brzmi, ale w praktyce się sprawdza znakomicie ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Cytat Nie wiedziałem że w PHP5 nie można używać referencji do obiektów. Czy to znaczy, że parser sam wybierze, że to ma być referencja czy skopiuje cały obiekt? //to pytanie już czysto teoretyczne, po prostu chce wiedzieć smilingsmiley.gif Domyślnie obiekty są przekazywane przez referencję - jeśli chcesz kopię obiektu, to musisz zrobić to ręcznie. Parser nic nie wybiera : ) Ciagle to Ty decydujesz. -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 18.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
PdM: dzięki za podpowiedź, jednak to wcześniejsze rozwiązanie mnie zadawala i nie będe go zmieniał
![]() Cysiaczek: dzięki za wyjaśnienie pozdrawiam problem rozwiązany - mozna zamknąć ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 11:33 |