![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 14.06.2004 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym wywołać klasę z nie określoną ilością argumentów (po przecinku:P), ale nie znalazłem żadnej funkcji, która by to zrobiła. Zrobiłem więc coś takiego:
...ale to ^ mi się za bardzo nie podoba. Czy da się to jakoś krócej zrobić?? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
A że tak z ciekawości zapytam.. co ta klasa robi, że nie wiesz ile (i czy w ogóle) parametrów do niej prześlesz?
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 109 Pomógł: 1 Dołączył: 19.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
uzyj func_get_args()
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 14.06.2004 Ostrzeżenie: (0%) ![]() ![]() |
Tworzę klasę, która w łatwy sposób zarządzała by uruchamianiem innych klas, więc potrzebuje szybkiego sposobu, aby do nowych klas dodano (jeśli są ) jakieś argumenty.
Po drugie nie mogę wykorzystać wywoływania klasy w taki sposób $x = new x(a,b,c...), ponieważ robi to skrypt. Po trzecie nie wiem ile argumentów ma być dodanych dla danej klasy. Nie mogę uzyć func_get_args() ponieważ to nie konstruktor wywoływanej klasy ma sprawdzać ile jest argumentów, a po drugie wolał bym aby sprawdzanie ile jest argumentów było wykonywane na zewnątrz klasy. Ten post edytował ignition 12.10.2004, 14:10:30 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 109 Pomógł: 1 Dołączył: 19.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
ok, sory. w takim razie ja nie wiem o co chodzi
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 14.06.2004 Ostrzeżenie: (0%) ![]() ![]() |
Po prostu chcę aby sprawdzanie ile argumentów ma być nadanych do klasy było sprawdzane nie wewnątrz konstruktora wywołanej klasy, lecz "na zewnątrz", czyli w skrypcie który będzie uruchamiał daną klasę (coś podobnego u góry)
![]() Ten post edytował ignition 13.10.2004, 17:14:56 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Sam się kiedyś nad tym głowiłem i nawet wypisywałem pytania na forum. Najlepszym rozwiązaniem tego problemu jest tworzenie takich klas, które nie wymagają argumentów, a zamiast tego tworzenie metody, np. setup(), która daną instancję skonfiguruje.
Rozwiązaniem nieco mniej 'pięknym' jest taki kod:
Ten post edytował matid 13.10.2004, 18:32:54 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 14.06.2004 Ostrzeżenie: (0%) ![]() ![]() |
Wyskakuje m i błąd:
Parse error: syntax error, unexpected ')' in d:\program files\wamp\www\iVolutio\start.php(23) : eval()'d code on line 1 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(ignition @ 2004-10-13 17:43:44) Wyskakuje m i błąd: Parse error: syntax error, unexpected ')' in d:\program files\wamp\www\iVolutio\start.php(23) : eval()'d code on line 1 To była drobna pomyłka przy nazewnictwie zmiennych. Teraz powinno być ok. |
|
|
![]() ![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
ignition a moze bys posiedzial dluzej z karteczka i olowkiem i przemyslal budowe klas ?
Ni cholery nie zrozumialem z twoich pierwszych wypowiedzi. Zawsze masz do dyspozycji eval, mozesz do wszystkich klas agrumenty przekazac w tablicy. mozesz wywolac klase bez argumentow, pozniej wykonaj metody do odpowiedniej konfiguracji. Metod jest wiele. a tak wogole, dlaczego konstruktor klasy wykonywanej nie ma wiedziec jakie argumenty wpisales przy wywolywaniu ? Chyba ze ja zle rozumuje. Napisales ze zewnetrzna klasa ma wiedziec ile jest argumentow, ale wewnetrzna nie ma sobie tego wykrywac. Wiec po cholere przekazujesz jej argumenty jak o nich wiedziec nie ma ? Wytlumacz jakos logicznie co ty wogole chcesz ? -------------------- Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota Zarządzaj swoim budżetem domowym |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 14.06.2004 Ostrzeżenie: (0%) ![]() ![]() |
Czy dało by się zrobić o coś takiego:
...klasa się ładuje, ale nie wiem kto jest obiektem klasy; Ten post edytował ignition 14.10.2004, 11:17:26 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Z tego co wiem, nie ma możliwości sprawdzenia, ile parametrów wymaga lub przyjmuje jakaś metoda.
Jednak takie rozwiązanie mi również wydaje się błędne już z samego założenia. Nie lepiej jest ustalić wspólny interfejs dla danych klas (w końcu, jeśli chcesz z nich korzystać w ten sposób, to musi je coś łączyć...) i potem niezależnie od tego, instancją jakiej klasy będzie nasz obiekt, zawsze będziemy mogli sprawdzić, czy dziedziczy z wybranego przez nas interfejsu. Jeśli tak - będziemy dokładnie wiedzieć, jakie parametry i w jakiej kolejności należy mu dostarczyć. W manualu jest więcej przykładów na temat tworznia interfejsów (oczywiście mowa o php5) ale jeśli będziesz potrzebował jeszcze jakiś przykład - pisz. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 14.06.2004 Ostrzeżenie: (0%) ![]() ![]() |
No tak ale jest jedno ale. Po pierwsze jeżeli chcę stworzyć klasę, która by zarządzała innymi klasami to czy każda zarządzana klasa powinna dostawać do konstruktora jeden argument w formie tablicy? Oczywiście, że nie ponieważ większość (większość w znaczeniu skrypty udostępnione w necie jak np. adodb) klas nie dostaje jednego argumentu (w formie tablicy), tylko kilka. Po drugie interfejsy są jak na taki typ klasy nie rozsądne, ponieważ chcę różne ładować klasy (nie tylko tworzone przezemnie), które mogą nie być tworzne myślą o tym systemie
![]() Ten post edytował ignition 14.10.2004, 14:43:33 |
|
|
![]() ![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Co ty chcesz zrobic ? klase ktora uruchamia dowolna klase z nieba wzieta czy chcesz zrobic klase ktora bedzie posiadac jakis swoj standart i wedlog standartu pisac potrzebne klasy.
Niestety nie widze jakiegokolwiek logicznego sensu w tym co chcesz zrobic. Zawsze mozesz probowac skanowac pliki klas i wyszukiwac ilosc argumentow. ale moim zdaniem jest to juz chyba jakas paranoja. Polecam przeanalizowac ponownie projekt klasy. Co do ADOdb to inicjuje sie go funkcja ktora oddaje obiekt ![]() -------------------- Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota Zarządzaj swoim budżetem domowym |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 10:20 |