![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 106 Pomógł: 0 Dołączył: 11.03.2007 Skąd: Łódzkie Ostrzeżenie: (0%) ![]() ![]() |
Witam.. mam taki kod:
fragment pliku strona.php:
nastepny plik wywolujacy obiekty z klasy (fragment):
i wyskakuje mi error: Fatal error: Call to undefined function wyswietl_dodaj_karte() in C:\xampp\htdocs\praca_inz\test.php on line 7 co jest nie tak?? jak zrobic aby funkcja wzor_obranowania byla elastyczna i mogla w sobie wyswietlac tez inne fukcje.. Ten post edytował japolak 5.11.2009, 22:30:54 -------------------- moje projekty:
www.hackwars.pl - hacking , webdesign itp www.kosmosnews.pl - Wszechświat bez granic |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Podstawy obiektówki. Zauważ, że funkcja jaka wywala błąd jest wewnątrz definicji klasy strona, przez co musi być wywoływana poprzez obiekt tejże klasy. A skoro tak jest to wywołuj ją prawidłowo, czyli
Bo chyba nie chodzi Ci o wariacje w stylu:
EDIT: oczywiście to są moje domysły bo kompletnie nie wiem co metoda wyswietl_dodaj_kartę() robi. Dla mnie jest zapewne widokiem jakimś, ale to tylko moje przypuszczenia... Ten post edytował thek 5.11.2009, 22:56:33 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 106 Pomógł: 0 Dołączył: 11.03.2007 Skąd: Łódzkie Ostrzeżenie: (0%) ![]() ![]() |
Podstawy obiektówki. Zauważ, że funkcja jaka wywala błąd jest wewnątrz definicji klasy strona, przez co musi być wywoływana poprzez obiekt tejże klasy. A skoro tak jest to wywołuj ją prawidłowo, czyli
Bo chyba nie chodzi Ci o wariacje w stylu:
EDIT: oczywiście to są moje domysły bo kompletnie nie wiem co metoda wyswietl_dodaj_kartę() robi. Dla mnie jest zapewne widokiem jakimś, ale to tylko moje przypuszczenia... codzi mi konkretnie o to ze w metodzie wzor_obranowania znajduje sie tabela a ja chce jeszcze w wybrane komórki tabeli umiescic inne obiekty.. inne metody.. Cytat 1. $wyswietl->zawartosc = $wyswietl->wyswietl_dodaj_karte(); to sprawia iż obiekt wyswietl_dodaj_karte wyswietla mi sie calkowicie nad obiektem wzor obramowania.. a chce aby znajdowal sie wewnatrz tabeli ktora obiekt wzor oprogramowania tworzy.. -------------------- moje projekty:
www.hackwars.pl - hacking , webdesign itp www.kosmosnews.pl - Wszechświat bez granic |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Twoim problemem jest to, że wszystko masz w jednej klasie i nie widzisz co jest czym. Gubisz się między modelem, kontrolerem i widokiem. Widok to wzor_obranowania() i jego nawet nie tykaj. To co masz zrobić z zawartością definiujesz wewnątrz metody wyswietl_dodaj_karte() i wywołujesz ją z odpowiednimi parametrami lub używasz $this jeśli tylko zapisujesz do zmiennej $zawartość poprzez $wyswietl->wyswietl_dodaj_karte($parametry), ale broń boże nie wyświetlasz tego co robi! Od tego masz metodę widoku wzor_obranowania() bo to ona wyświetla całość tabelki. Podziel sobie kod na logiczniejsze działy jeśli chcesz mieć całość w jednej i zrób bloki kodu, które funkcjonalnie będą równe modelowi, kontrolerowi oraz widokowi/-om. Teraz masz bowiem coś, co jest jednocześnie metodą modelu (kontrolera? ki czort wie co robisz tak naprawdę wewnątrz więc nie mam pojęcia gdzie to wcisnąć), ale jednocześnie ma być widokiem bo wyświetla dane. Tak się nie robi i dlatego masz problem z wciśnięciem tego. Możesz dopisać do zmiennej zawartość efekt tej metody lub nadpisać ją, ale nie tak jak Ty to robisz tylko jak Ci pokazałem w drugim przypadku. Po drodze jednak pewnie zamiast nadpisywać Ci dane - dopisuje je, przez co kod się wewnątrz wydłuża.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 106 Pomógł: 0 Dołączył: 11.03.2007 Skąd: Łódzkie Ostrzeżenie: (0%) ![]() ![]() |
hmm no dałeś mi teraz do myslenia .. widać nie dokońca rozumiem reguł obiektowości.. moze zdradze troche wiksza część mojej jednej klasy..> teoretycznie podzielilem sobie klasy .. na te ktore wyswietlaja jakis teoretycznie statyczny kod.. oraz te ktore pobieraja dane z bazy.. zerknij i oceń.. czy to jest wszystko do kitu.. ![]() chcialem we wzorze_obramowania . umieszczac sobie w zaleznosci co dana strona ma zawierac odpowiednie "funkcje / obiekty" moze wiec inaczej zapytam .. jak zrobic aby nie trzeba bylo pisac po sto razy do każdej funkcji w klasie tabelek tylko raz zrobic wzór i wszystko w niego pakować ![]() [/php] -------------------- moje projekty:
www.hackwars.pl - hacking , webdesign itp www.kosmosnews.pl - Wszechświat bez granic |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Jak dla mnie to za bardzo chcesz upychać wszystko do wszystkiego. Zauważ, że większość Twoich metod uparcie chce coś wyświetlać, choć wcale nie jest to konieczne. Niech będzie sobie co chcesz w podziale, ale ustawiaj to osobnymi metodami. Osobna do doctype, osobna do meta, osobna do dodawania css i js, osobna do body. Dopiero w metodzie wyświetlającej całość strony składaj to do kupy. Poza tym uważam, że pisanie wszystkiego w jednej klasie wprowadzi chaos do twojego projektu w pewnym momencie będziesz miał tyle metod, że pogubisz się w ich wywołaniach. Zauważ, że przykładowo zdefiniujesz sobie metodę display() i będzie miała ona gotowy szablon strony. wystarczy, że w jej zmienne "wstrzykniesz" kawałki kodu i wszystko zagra. Jak go podzielisz? Twój wybór. Ale tylko ona jedna ma wpływać na całość. Nie zaś tak, że dostaje wszystko na gotowe. Weź sobie przykładowo sytuację, że obiekt ma do zmiany head i body. To zrób obiektowi funkcje je ustawiające, ale oczekuj określonego formatu i typu, byś mógł je do zmiennej wpisać. Gdy już masz wszystko ustawione, wywołaj metodę display() a wyświetli ci całość. Tymczasem Ty upychasz metodę wyświetlającą mikroskopijną część wyniku po innej metodzie, która też to robi, by ta druga robiła to samo w trzeciej. To nie ma sensu. Metodami ustawiaj tylko zmienne wewnątrz klasy, a tylko jedna powinna wyświetlać. Da ci to coś w stylu:
Oczywiście to baaaaaaaaaardzo okrojona wersja, ponieważ head powinno mieć podział na zmienną title (często zmieniana zmienna), tablicę znaczników meta, tablicę dołączanych arkuszy stylów, tablicę dołączanych skryptów itp, wraz z odpowiednimi metodami. Takie podejście mocno upraszcza nawet późniejsze dziedziczenie. Bo ostatecznie kończy się to poprzez wywołanie Zauważ, że to, co będzie w head i body jest dla mnie obojętne dopóki będzie miało odpowiedni format. Mogę tam wrzucić tablicę, którą mi funkcja display() sama wstawi odpowiednio do szablonu (tak jak zrobiłem z title), albo jako ciąg znakowy jak teraz to mam. Bez mieszania, kombinowania. a jeśli zechcę coś zmienić z wyświetlaniem to po prostu inny display mogę napisać bez modyfikacji czegokolwiek innego. Czyli przechodząc na terminologię MVC -> napisałbym inny widok dla tej klasy ![]() Co istotniejsze. Dopóki nie wywołam funkcji display, mogę zmieniać nawet setki razy title czy inną część bez wpływu na całość tego co Ci zostanie pokazane. Bo i też jest to cały czas na serwerze tylko. Sekcję body możesz nawet składać. Wystarczy, że przerobisz funkę by zamiast podmiany mogła dodawać dodatkowo. A więc choćby coś w stylu:
EDIT: czemu wspomniałem o trybie dodawania? Bo to świetna baza wyjściowa dla tworzenia modułów. Zrobisz tylko pierwszy w trybie normalnym, a resztę w trybie dodawania i masz budowanie sekcji body z klocków wedle uznania. Najlepiej zaś jeszcze display domyślnie ustalić na jakiś wzorzec i go wypełniać. innymi słowy znacznie bardziej rozbudowany niż mój. Z większą ilością kod html, pomiędzy którymi tylko zmienne wkładamy. Ten post edytował thek 7.11.2009, 15:26:37 -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 106 Pomógł: 0 Dołączył: 11.03.2007 Skąd: Łódzkie Ostrzeżenie: (0%) ![]() ![]() |
ok..
Wielkie dzięki za udzielenie wskazówek. niezmiernie mi sie przydadzą .. teraz troche inaczej na to wszystko patrze;) ... wiesz ten kod co ci przedstawiłem.. to część mojej pracy inz. Program mam juz gotowy.. akceptacje promotora tez mam.. ale chcialem sobie kod poukładać jakoś ładniej, zanim oddam do końcowej analizy.. ![]() tak sie zastanawiam. skorzystać z jakiejś literatury?? myślalem poczytać troche : Php object - oriented solutions. .ale nie wiem czy to dobra pozycja aby zaczynac?? bo to co aktualnie mam wykonane bylo zalążkiem .. z książki : PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty moze ty znasz jakaś pozycje wartą uwagi?? -------------------- moje projekty:
www.hackwars.pl - hacking , webdesign itp www.kosmosnews.pl - Wszechświat bez granic |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Szczerze mówiąc, to do PHP nie czytałem żadnych książek drukowanych
![]() ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 13:01 |