Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rzutowanie typów - implementacja routera
Forum PHP.pl > Forum > PHP > Object-oriented programming
starach
Witam.
Czytałem trochę w internecie o klasach router które uruchamiają poszczególne akcje na stronie w zależności od przekazanych parametrów. Problem polega na tym że nie zrozumiałem do końca zapisu ( tak prawdę mówiąc to nie chciało mi się czytać jakichś 90 linijek wodolejstwa ):
eeee no to mam problem bo nie mogę tego znaleźć ...
W każdym razie było to coś na wzór rzutowania typu w metodzie i wyglądało to tak jakby typ był interfejsem.
Natomiast do metody przekazywano obiekt. Mógłby ktoś przykładowym kodem zarzucić, bo niestety ten mój tępy mózg nie pamięta jak to wyglądało. Aha reasumując te moje powyższe wypociny chciałbym się zapytać czy dobrze mi się wydaje ... że rzutowanie typu na interfejs miało zapobiec przekazaniu do metody innych obiektów niż takie które są zgodne z danym interfejsem?
LBO
Type Hinting

edit:

Tylko, co to ma wspólnego z Routerem. Chodzi Tobie o wyjaśnienie budowy zwyczajnej konstrukcji językowej. Temat wprowadza w błąd.
starach
Dobra dzięki smile.gif
Nie wiedziałem jak to opisać już nie mówiąc o podaniu nazwy tematu.
Znalazłem ten artykuł przeszukując forum parę dni temu tylko że nie pamiętam jaką frazę wprowadziłem a było ich kilka tongue.gif
Sedziwoj
Cytat(LBO @ 15.04.2007, 19:40:20 ) *


Ja się zastanawiałem czy nie opakować podstawowe w obiekty, aby przyjmować tylko obiekty, ale to pewnie by rozwaliło wydajność :|
(tylko że można by było np. nazwa->lenght() lol)

Cytat
edit:
Tylko, co to ma wspólnego z Routerem. Chodzi Tobie o wyjaśnienie budowy zwyczajnej konstrukcji językowej. Temat wprowadza w błąd.


Ja też, jakoś nic o tym nie czytałem, a problem jest dość zawile przedstawiony.
starach
No jak to co ma wspólnego z routerem ? tongue.gif
Uruchamiasz akcje za pomocą danej metody do której przekazujesz obiekt.
Masz klasę news, artykuły i o sobie
Ruter przechwyca parametry z urla po czym uruchamia odpowiednią akcję chodzi o to że w powyższych klasach były takie same metody, które były by uruchamiane z klasy router.

edit>
Cytat
No jak to co ma wspólnego z routerem ? tongue.gif
Wiem ... a przynajmniej tak mi się wydaje ;p
LBO
Cytat(Sedziwoj @ 15.04.2007, 19:49:40 ) *
Ja się zastanawiałem czy nie opakować podstawowe w obiekty, aby przyjmować tylko obiekty, ale to pewnie by rozwaliło wydajność :|
(tylko że można by było np. nazwa->lenght() lol)


Właśnie po to jest rzutowanie typów argumentów. Ale, jak sugerujesz, tworzenie obiektów z już istniejących typów danych jest niepotrzebne. Dodać kilka linijek kodu z is_int()" title="Zobacz w manualu PHP" target="_manual, is_array()" title="Zobacz w manualu PHP" target="_manual etc., to nie problem, a przynajmniej można obsłużyć wynikłe z tego powodu - argument niepożądanego typu - błędy.

edit:
Cytat(orglee @ 15.04.2007, 19:55:11 ) *
No jak to co ma wspólnego z routerem ? tongue.gif
Uruchamiasz akcje za pomocą danej metody do której przekazujesz obiekt.
Masz klasę news, artykuły i o sobie
Ruter przechwyca parametry z urla po czym uruchamia odpowiednią akcję chodzi o to że w powyższych klasach były takie same metody, które były by uruchamiane z klasy router.

edit>
Wiem ... a przynajmniej tak mi się wydaje ;p


Sorry, ale Ty przedstawiasz 2 różne problemy:
1. Jak wygląda konstrukcja rzutowania typów w funckjach/metodach?
2. Implementacja Routera z użyciem rzutowania typów.

Czepie się drugiego punktu - routerów w PHP jest mrowie i pytanie się na forum o to - tak jakby to była jedyna i słuszna, znana przez wszystkich implemetacja - jak to jest zrobione, co najmniej mnie dziwi. Zarzuć kodem, to można podyskutować.

edit:
I jeszcze jedno... Router nie uruchamia akcji, on tylko pobiera parametry żądania - nazwy(modułu, ) kontrolera i akcji oraz dodatkowe zmienne. Wywoływaniem akcji zajmuje się dispatcher.
Sedziwoj
Cytat(LBO @ 15.04.2007, 19:56:13 ) *
Właśnie po to jest rzutowanie typów argumentów. Ale, jak sugerujesz, tworzenie obiektów z już istniejących typów danych jest niepotrzebne. Dodać kilka linijek kodu z is_int()" title="Zobacz w manualu PHP" target="_manual, is_array()" title="Zobacz w manualu PHP" target="_manual etc., to nie problem, a przynajmniej można obsłużyć wynikłe z tego powodu - argument niepożądanego typu - błędy.


Wiesz, ale tak nikt nie użyje tego co nie trzeba, a pilnowanie typów zwalasz na obiekt który ma odpowiadać danemu. To by powodowało błąd przy wywoływaniu funkcji/metody, no i by prowadziło do większej obiektowości, no ale wydajność chyba tu zwycięża. To powinni od razu w język wprowadzić (tzn. od 5 aby dało się typizacje argumentów każdego typu... no ale wiem że to jest związane z sposobem obsługi... i nie jest proste).

A co z tym routerem?

EDIT
A to już coś wyjaśnia...
Po prostu musisz ustalić sposób przekierowania, jakie dane wejściowe prowadzą do jakiego kontrolera.
I jak napisał LBO jest wiele implementacji.
cicik
Cytat(Sedziwoj @ 15.04.2007, 19:49:40 ) *
Ja się zastanawiałem czy nie opakować podstawowe w obiekty, aby przyjmować tylko obiekty, ale to pewnie by rozwaliło wydajność :|
(tylko że można by było np. nazwa->lenght() lol)
Ja też, jakoś nic o tym nie czytałem, a problem jest dość zawile przedstawiony.


Ja też nad tym myślę od dłuższego czasu.
Bardzo mnie irytuje brak typizacji dla typów wbudowanych. Jest to uciążliwe przy robieniu dokumentacji i kontrolowaniu czy coś jest tym czym ma być.
Od wprowadzenia tego w życie nie powstrzymuje mnie wydajność bo wydaje mi się, że narzut nie byłby duży.
Natomiast brakowałoby mi wbudowanej konwersji typu wbudowanego na mój i odwrotnie.
Musiałbym wszędzie pisać new Integer(5) zamiast przekazać po prostu 5 do metody a konwersja już by zrobiła z tego obiekt klasy Integer.
Pod tym względem MS w C# zrobił mistrzostwo świata. Sama idea, że wszystko jest obiektem i dziedziczy po Object jest cudowna. Dzięki czemu jeśli mam taką potrzebę to mogę napisać metodę, która przyjmuje wszystko. No ale niestety w PHP tego nie ma - oby kiedyś się pojawiło.
LBO
Cytat(cicik @ 15.04.2007, 20:18:40 ) *
Pod tym względem MS w C# zrobił mistrzostwo świata. Sama idea, że wszystko jest obiektem i dziedziczy po Object jest cudowna. Dzięki czemu jeśli mam taką potrzebę to mogę napisać metodę, która przyjmuje wszystko. No ale niestety w PHP tego nie ma - oby kiedyś się pojawiło.


To w takim razie sprawdź Ruby smile.gif

Try Ruby!
Sedziwoj
Może zaczniecie od innych języków, bo Java też ma drzewo typów z jednym korzeniem a była wcześniej niż C# czy Ruby. A może nawet było coś wcześniej z taką strukturą typów. (co prawda Java posiada typy podstawowe, które wszystko psują :|)

EDIT, zapomniałem napisać o dacie powstania <lol>
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.