![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Wiem, że stosowanie zmiennych globalnych w klasach nie jest zbyt dobrym pomysłem, ale kurczę po coś wymyślono te global i trzeba wykorzystać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Niestety pojawiają się problemy, choć wcale nie chodzi o to że się w niej gubię. Mam plik konfiguracyjny:
CODE $db['host'] = "localhost"; $db['user'] = "root"; $db['pass'] = "root"; $db['base'] = "mngclass"; $db_config = new Registry($db); ?> W pliku testującym załączam wszystkie inne klasy itd, a w pliku z klasą GenericObject mam coś takiego:
Próba odpalenia kodu skutkuje czymś takim: Cytat Parse error: parse error, expecting `T_VARIABLE' in D:\servhost\Asmox toolkit\class_genericObject.php on line 11 Co się stało? Ten post edytował Asmox 6.05.2009, 16:53:36 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
zajrzyj lepiej do manuala
http://pl.php.net/manual/pl/language.variables.scope.php |
|
|
![]()
Post
#3
|
|
Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
private global
to private czy global? a w OOP używa się public aby obiekt był widoczny poza klasą. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Cytat Wiem, że stosowanie zmiennych globalnych w klasach nie jest zbyt dobrym pomysłem, ale kurczę po coś wymyślono te global i trzeba wykorzystać Po to sie pisze w OOP zeby nie uzywac zmiennych globalnych masz po to public. Chcesz pisac OOP czy co,po to wymyslono skladowe dostepu by je uzywac. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Asmox,
co za problem zrobić, że w konstruktorze podajesz tablicę z danymi bazy danych i potem np. ją usuwasz i wtedy tylko ta klasa ma do nich dostęp (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) oczywiście jak chcesz je gdzieś dalej wykorzystac to możesz spłodzić funkcję w klasie, która te dane bedzie udostepniać |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Użycie global $db w każdej funkcji rozwiązuje problem, ale nie podoba mi się to... w takim razie może wytłumaczę mój problem:
Mam "plik konfiguracyjny" z danymi bazy. Chciałbym aby dało się korzystać z tych danych. Tylko nie bardzo rozumiem co mi tam napisaliście. Chciałbym najlepiej jakiegoś gotowca, ale skoro u was ich nie dają to może dokładniejsze wskazówki...? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 229 Pomógł: 34 Dołączył: 7.12.2008 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli dobrze rozumiem o co Ci chodzi, to możesz sobie wewnątrz klasy zadeklarować połączenie z bazą danych i poruszać się w obrębie tej klasy...
Pozdro |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie nie o to chodzi. Chcę, żeby klasa mogła korzystać z pliku konfiguracyjnego.
|
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
No to nie możesz zrobić klasy z metodami statycznymi odwołującymi się do konkretnych zasobów? W Kohana działa to bardzo fajnie.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
yhy, to może jakoś tak:
- masz plik konfiguracyjny - tworzysz sobie klasę cConf, która odpowiada za ten plik konfiguracyjny (odczyt, zapis) - tworzysz obiekt klasy cConf, a potem za pośrednictwem jakiejś funkcji składowej odczytujesz dane z pliku i zapisujesz do wewnętrzych zmiennych (najlepiej private, tak aby nie dało się ich edytowac z zewnątrz) - i teraz: 1) inne klasy mogą od razu w parametrach funkcji składowych oczekiwać okreslonych danych (np. hasło do bazy) 2) inne klasy w parametrze funkcji składowej oczekują adresu obiektu klasy i dopiero potem odczytują sobie hasło do bazy rozwiązanie nr1 wydaje się najlepsze, ponieważ inne klasy nie muszą znać w ogóle klasy od pliku konfiguracyjnego, a także bezpieczniejsze, bo nie podajemy adresu obiektu żadnej innej funkcji Pozdrawiam |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tak, ale zauważyłem, że po stworzeniu egzemplarza klasy cconf, mamy zmienną, która nie jest dostępna w klasie x. Więc żeby była widoczna, trzeba by było uglobalnić zmienną z tym egzemplarzem (klasy cconf).
Poszperałem trochę w moich książkach do PHP. Znalazłem fajną funkcję parse_ini_file($sciezka, $obecnosc_sekcji). Funkcja przerabia normalnie plik konfiguracyjny i tworzy elegancką tablicę asocjacyjną. Nie wiem tylko, czy dobrze napisałem kod (nie chodzi o poprawność działania, ale różne wypadki, jak np. przeniesienie konfiguracji w inne miejsce - czy będzie można łatwo poprawić zmiany, czy też nie): wycinek klasy GenericObject:
klasa User:
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
do twojego problemu najbardziej jednak pasuje rada kolegi phpion (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 19 Dołączył: 24.12.2003 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
Najprościej (choć nie najlepiej) z tego co wywnioskowałem z Twojego postu to po stworzeniu już instancji klasy bazodanowej zrobiłbym tak:
więc po stworzeniu instancji tej klasy w konstruktorze przypiszesz sobie instancję klasy bazodanowej. Ten post edytował jajcarzd1 8.05.2009, 07:52:41 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(rzymek01) do twojego problemu najbardziej jednak pasuje rada kolegi phpion (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Cytat(phpion) No to nie możesz zrobić klasy z metodami statycznymi odwołującymi się do konkretnych zasobów? W Kohana działa to bardzo fajnie. Kohany wolałbym na razie nie używać. Po niezłej wpadce z Zendem, godzinie spędzonej na przepisywaniu kodu znak po znaku (przede wszystkim trudno było mi zrozumieć o co chodzi) i nie rozwiązaniu problemu, postanowiłem przez jakiś czas robić własne rozwiązania. phpion, czy masz na myśli coś takiego?
Przepraszam za błędy w kodzie, ale jeszcze nie bardzo wiem, jak to się robi z tymi statycznymi klasami (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
phpion, czy masz na myśli coś takiego? Generalnie tak, o to mi chodzi. Po usunięciu błędów składniowych to będzie to (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
tak może być?
A jeszcze przeglądając niektóre FW zauważyłem, że używa się też stałych. Może one by się nadawały? |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Stale lepiej uzywac do lokalizacji plikow/katalogow a konwencja mowi ze $db chodzi o baze i wtedy wiadomo,ja jakos wole tablice na dane do bazy.
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 359 Pomógł: 12 Dołączył: 16.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
czyli dobrze zrobiłem, czy nie? Bo trochę nie rozumiem Twojej wypowiedzi.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 592 Pomógł: 62 Dołączył: 3.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
jak najbardziej taki kod jest poprawny, więcej nie można powiedzieć nie znając struktury aplikacji, ale sądząc po wczesniejszych wypowiedziach, taki kod bedzie ci odpowiadał (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 26.09.2025 - 10:40 |