Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa dostępna w każdym fragmencie skryptu...
Forum PHP.pl > Forum > PHP
Turgon
Otóż mam klasę mysql.class.php, która pozwala na dostęp do bazy modelowi, jednakże gdy chce wywołać drugi model to klasa wywala, że nie można jej ponownie zadeklarować, więc co zrobić, żeby ta klasa zawsze był zadeklarowana w taki sposób by bez errorów mógłbym z niej korzystać w każdym fragmencie skryptu?

Mówię odrazu, że próbowałem kombinować coś z dziedziczeniem, ale nie wyszło...
LamaMASTER
Zrób sobie w głównym pliku np.
$klasa =& new Klasa();
a w innych fragmentach np.:
global $klasa;

$klasa->coś

No chyba, że potrzebna ci na nowo deklaracja, ale tu już zastanów się nad wydajnością winksmiley.jpg
Turgon
To nie jest zbyt dobre rozwiązanie dla mnie. Bo u mnie działa to na zasadzie. Klasa FrontController ładuje na podstawie Requesta Kontroler danej akcji on ładuje odpowiedni model - jeśli są dwa na dodatek i tu jest zonk...
NuLL
Cytat(Turgon @ 21.07.2006, 10:12 ) *
To nie jest zbyt dobre rozwiązanie dla mnie. Bo u mnie działa to na zasadzie. Klasa FrontController ładuje na podstawie Requesta Kontroler danej akcji on ładuje odpowiedni model - jeśli są dwa na dodatek i tu jest zonk...

Tzn ze masz juz blad projektowy w samych podstawach - zacznij pisac od nowa party.gif
Cysiaczek
Po co deklarować dwa razy? Uzyj do tego Singletona - w końcu po coś jest smile.gif na pewno lepsze to niż deklarowanie klasy dwa razy, czy sztuczki z dziedziczeniem.

Pozdrawiam
Turgon
NuLL niby jaki błąd ? Cysiaczek tylko jest jeden problem. Ja nie rozumiem Singletona... Nigdzie nie ma tego wyjaśnionego jakoś łopatologicznie...
siemakuba
hej, no ale jeżeli masz błąd że nie możesz ponownie zadeklarować klasy, to co ty właściwie robisz? includujesz drugi raz plik z klasą?

Jeżeli wykorzystujesz jedną bazę w aplikacji to podobnie jak @Cysiaczek polecam Singleton. Zawsze czysto, zawsze sucho jasno, zawsze pewnie :)

A jeżeli błąd wynika z drugiego includowania pliku, to możesz szybko go rozwiązać robiąc include_once" title="Zobacz w manualu php" target="_manual

pozdr.
Turgon
Nie, bo błąd wynika z tego, że chce jeszcze raz wywołać klasę... bo inna klasa jej potrzebuje na swój użytek...
Cysiaczek
Trochę to dla mnie dziwne - dlaczego nie przekażesz obiektu tej klasy do innej klasy? Klasy deklarujesz tylko raz, a potem ich używasz. Nie da się 2x zadeklarować tej samej klasy, bo php na to nie pozwoli (dziękujemy Ci php).
Singleton, to nie jest kolejna funkcja w php, a wzorzec projektowy. Prosty, bo prosty, ale wzorzec.
Zakłada on możliwość istnie w konteksćie aplikacji tylko jednego obiektu danej klasy. Przy każdej próbie powołania do życia obiektu najpierw jest sprawdzane, czy w systemie nie ma już przypadkiem obiektu tej klasy. Jełśi jest, to jest zwracany, jełśi nie ma, to zwracany jest nowy obiekt. Resztę znajdzie w manualu php w dziale zajmująym się wzorcami.

Pozdrawiam.
siemakuba
mała nieśmiała uwaga: może zechciałbyś pokazać ten błąd? Mam wrażenie, że każdy mówi o czymś innym, a pomiędzy nami wszystkimi ty pozostajesz bez rozwiązania problemu.

Błąd podwójnego zadeklarowania klasy zdaży się kiedy (mówiąc łopatologicznie) będziesz miał w kodzie dwie klasy o takiej samej nazwie. Więc próbujesz jakoś dziwnie pobierać drugą instancję tej klasy.

pozdr.
Turgon
Fatal error: Cannot redeclare class block in C:\Documents and Settings\Administrator\Moje dokumenty\xampplite\htdocs\framework1\Source\Models\block_model.php on line 53

Takie mam błędy... Bo napisałem tak funkcje uruchamiającą w kontrolerze, że otwiera na nowo... Jak można to zrobić, żeby jak klasa istnieje tego nie robił ?
nospor
Co rozumiesz poprzez "otwiera na nowo"? Inlcuda robisz? No to juz padlo tu rozwiązanie: include_once
Turgon
include a potem następuje $action = new $actioname; ...
nospor
no to przeciez mowie: include_once. zmien include na include_once. tak ciezko to zrobic? ile razy mozna o tym mowic. Sprobowac chociaz mogles czy ci zadziala a potem smazyc posta....
siemakuba
gdybyś czytał ze zrozumieniem to już byś miał problem rozwiązany. Przecież napisłem powyżej, że inludujesz ponownie, i że powinineś zrobić include_once i będziesz miał problem z głowy. Może nie jest to super elegancko ale na pewno skutecznie.

No i teraz powiedz, dlaczego tego nie zrobiłeś? :P

pozdr.

edit:
@nospor
jak zwykle szybszy... :)
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.