Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Klasa publiczna ale tylko dla niektorych klas, czy da sie to zrobic?
Orzeszekk
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


Zalozmy ze mam jakis obiekt Obiekt i drugi obiekt ObiektSterujacy.

chce by ObiektSterujacy mogl wywolac metode obiektu Obiekt->zmienCostam() i cos w nim zmienic, ale zeby tylko obiektSterujacy mogl wywolac ta metode. Dla klasy KlasaPoboczna metoda zmienCostam powinna byc chroniona.

Czy jest jakis inteligentny sposob na zrealizowanie tego ? w tym momencie jedyną rzeczą jaka mi przychodzi do glowy jest przesylac instancje obiektu ObiektSterujacy i w obiekcie Obiekt sprawdzac czy to instancja ObiektSterujacy. Jednak to nieeeleganckie niewygodne i niepotrzebny narzut.

Ten post edytował Orzeszekk 19.11.2011, 14:32:30


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


W PHP nie da się w żaden sposób określić poziomu dostępności klasy. Niestety wszystkie są publiczne. Tak więc na poziomie języka nic nie zdziałasz, jedynie w dokumentacji możesz to zaznaczyć.
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Ewentualnie możesz jeszcze się pobawić w instanceof, tyle że według mnie trochę to bez sensu i takie tworzenie obiektów idiotoodpornych, które mogą być użyte tylko w taki sposób jaki tego chcemy. IMO zbyteczna funkcjonalność wink.gif
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #4





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


Widocznosc klasy mnie nie obchodzi, klasa moze byc widoczna i publiczna.

chce zebym mogl ukryc niektore metody klasy przed niektorymi klasami. chcialem zrobic ładne idiotoodporne klasy smile.gif zeby wszyscy mogli np odczytac dana wartosc ale tylko jedna klasa sterujaca nadrzedna mogla uzyc settera zeby cos do niej zapisac.

No bo tak to po co mi getter i setter jak oba maja byc publiczne


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


PHP nie udostępnia też niczego co mogłoby działać jak metody zaprzyjaźnione czy dostępność po przestrzeni nazw. Jedyne kryterium widoczności metod to hierarchia klas.
Cytat
No bo tak to po co mi getter i setter jak oba maja byc publiczne
To jest raczej normalne że jeżeli istnieje setter, to jest on publiczny.
Go to the top of the page
+Quote Post
by_ikar
post
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(Orzeszekk @ 19.11.2011, 18:28:50 ) *
Widocznosc klasy mnie nie obchodzi, klasa moze byc widoczna i publiczna.

chce zebym mogl ukryc niektore metody klasy przed niektorymi klasami. chcialem zrobic ładne idiotoodporne klasy smile.gif zeby wszyscy mogli np odczytac dana wartosc ale tylko jedna klasa sterujaca nadrzedna mogla uzyc settera zeby cos do niej zapisac.

No bo tak to po co mi getter i setter jak oba maja byc publiczne


No to tak jak mówię, instanceof i jazda. Niech powiedzmy twój seter przyjmuje jako parametr jakiś inny obiekt, wówczas wywali błąd jeżeli przekażesz wartość z zupełnie innego obiektu.

  1. <?php
  2.  
  3. class Foo
  4. {
  5. private $options;
  6.  
  7. public function setValue(Bar $val)
  8. {
  9. $this->options = $val->options;
  10. }
  11.  
  12. public function getValue($val)
  13. {
  14. //..
  15. }
  16. }
  17.  
  18. class Bar
  19. {
  20. protected $options;
  21. public function __construct($options)
  22. {
  23. $this->options = $options;
  24. }
  25. }
  26.  
  27. $foo = new Foo();
  28. $foo->setValue(new Bar('some value'));


lub wersja z instanceof:

  1. <?php
  2.  
  3. class Foo
  4. {
  5. private $options;
  6.  
  7. public function setValue($val)
  8. {
  9. if($val instanceof Bar)
  10. {
  11. //..
  12. } else
  13. {
  14. //.. tutaj mozesz sobie rzucic wyjątkiem
  15. }
  16.  
  17. }
  18.  
  19. public function getValue($val)
  20. {
  21. //..
  22. }
  23. }
  24.  
  25. class Bar
  26. {
  27. protected $options;
  28. public function __construct($options)
  29. {
  30. $this->options = $options;
  31. }
  32. }
  33.  
  34. class Test
  35. {
  36.  
  37. }
  38.  
  39. $foo = new Foo();
  40. $foo->setValue(new Test('some value'));


Coś w tym stylu. Gdzieniegdzie taka funkcjonalność się przydaje, ale raczej nie do tego żeby zrobić klasę idioto odporną, tylko przykładowo do polimorfizmu.
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@by_ikar: Tu nie chodzi o typ argumentu, a o samo wywołanie metody. W PHP nie osiągnie tego czego oczekuje.
Go to the top of the page
+Quote Post
by_ikar
post
Post #8





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Tak, tak, wiem to, napisałeś to, nie chciałem tego samego powtarzać już wink.gif jedynie chciałem mu uświadomić że to zbędna funkcjonalność jeżeli by coś takiego chciał osiągnąć poprzez właśnie typ argumentu.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #9





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


No coz dobrze ze istnieje chociaz php doc w ktorym sobie mozna napisac gdzie czegos wolno uzywac a gdzie nie.


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A może opisałbyś swoją sytuację bardziej precyzyjnie? Może da się to jakoś ładniej rozwiązać, na poziomie języka.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #11





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


Chce zeby klasa Item_Object mogla miec zmienione parametry tylko podczas tworzenia oraz edycji parametrow w widoku edycji, a zeby przypadkowe uzycie settera np podczas obliczen gdzies tam w modelach bylo zabronione.

A jak juz jestesmy przy slabosciach jezyka, da sie jakos zmusic php by nie trzeba bylo pisac $this odwolujac sie do pól klasy?

chcialbym zeby bylo tak jak w javie

  1. klasa X{
  2. public $field;
  3. public function C{
  4. $field=x;
  5. }
  6. }


ew jesli nie ma takie dyrektywy to moze chociaz jakas instrukcja grupujaca with (jak ta w pascalu)
  1. with ($this)
  2. {
  3. $field=3; //$this->field = 3
  4. }

jak sie robi obliczenia na duzej ilosci pól to potrafi ten $this dobic

Ten post edytował Orzeszekk 20.11.2011, 14:08:41


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Chce zeby klasa Item_Object mogla miec zmienione parametry tylko podczas tworzenia oraz edycji parametrow w widoku edycji, a zeby przypadkowe uzycie settera np podczas obliczen gdzies tam w modelach bylo zabronione.
Takie coś w pewnych językach (ot, chociażby wspomnianej Javie) na "dziko" dałoby się pewnie osiągnąć, ale raczej nie powinieneś czegoś takiego robić. Obiekt powinien mieć swój publiczny interfejs, który powinien być niezależny od miejsca użycia. Jeżeli ktoś chce użyć settera to i tak go użyje (patrz: Reflection), co więcej na pewno zrobi to świadomie.

Cytat
A jak juz jestesmy przy slabosciach jezyka, da sie jakos zmusic php by nie trzeba bylo pisac $this odwolujac sie do pól klasy? [...]
Zawsze musisz poprzedzać do "$this->". Zresztą... to na prawdę nie jest jakiś problem czy udręka.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #13





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


  1. $result = $this->getUploader() . ' = new ' . $this->getClassName() . '('
  2. . $this->getFieldConstant() . ' );<br>' . $this->getPhotoEntry() . '= '
  3. . $this->getUploader() . '->upload ();<br>';


  1. $result = getUploader() . ' = new ' . getClassName() . '('
  2. . getFieldConstant() . ' );<br>' . getPhotoEntry() . '= '
  3. . getUploader() . '->upload ();<br>';


kwestia dyskusyjna z tym $this, ja tego nie lubie. Zresztą czesto o nim zapominam pisząc co powoduje czasem trudne do znalezienia błędy.

nie chodzi o to by tak naprawde na chama zabezpieczyc, wiadomo ze ktos moze uzyc reflection, ale chodzi mi o to by omyłkowo nie uzyc settera tam gdzie sie tego robic nie powinno. a jak ktos bedzie chcial swiadomie to to zrobi, nawet kod sobie moze przerobic przeciez.

Ten post edytował Orzeszekk 20.11.2011, 15:38:23


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
by_ikar
post
Post #14





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


No wiesz co, to są aż 4 znaki, z czego do dolara trzeba użyć shifta dodatkowo. Nie wiem jak jest w innych językach, ale podejrzewam że jest podobnie, bo niby skąd interpreter/kompilator ma wiedzieć że metoda do której się odnosisz pochodzi właśnie do tego obiektu, a nie obiektu który dziedziczysz?

Cytat
nie chodzi o to by tak naprawde na chama zabezpieczyc, wiadomo ze ktos moze uzyc reflection, ale chodzi mi o to by omyłkowo nie uzyc settera tam gdzie sie tego robic nie powinno. a jak ktos bedzie chcial swiadomie to to zrobi, nawet kod sobie moze przerobic przeciez.


No właśnie, jak będzie chciał to i tak użyje, a po co tworzyć jakąś niepotrzebną funkcjonalność, która jest zbędnym narzutem wydajnościowym.

Możesz bawić się w method chaining, i wtedy raz zapisać this:

Kod
$this->select()->from('table')->where('condition')->order('column asc')->limit(5);


itd. Póki co nie przeszkadza mi wpisywanie this, wystarczy że wewnątrz obiektu wstawię dolara i już mam listę zmiennych dostępnych w klasie/metodzie i na pierwszym miejscu zawsze mam this, strzałka w dół i od razu dostaje $this->. Kwestia edytora, kwestia snippetów i kwestia przyzwyczajenia wink.gif
Go to the top of the page
+Quote Post
Crozin
post
Post #15





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
nie chodzi o to by tak naprawde na chama zabezpieczyc, wiadomo ze ktos moze uzyc reflection, ale chodzi mi o to by omyłkowo nie uzyc settera tam gdzie sie tego robic nie powinno. a jak ktos bedzie chcial swiadomie to to zrobi, nawet kod sobie moze przerobic przeciez.
Nie da się w żaden sposób zabezpieczyć przed błędnym używaniem jakiegoś kodu. Nie na poziomie języka. Raczej powinieneś sobie to darować i co najwyżej w dokumentacji dobrze opisać jak powinno się korzystać, czemu tych przykładowych setterów nie powinno używać się tam i tam itd.

Cytat
Nie wiem jak jest w innych językach, ale podejrzewam że jest podobnie, bo niby skąd interpreter/kompilator ma wiedzieć że metoda do której się odnosisz pochodzi właśnie do tego obiektu, a nie obiektu który dziedziczysz?
To akurat nie jest żadnym problemem. Problemem jest to, że PHP jako język wieloparadygmatowy ma coś takiego jak funkcje globalne. Wymuszenie stosowania każdorazowo $this było najlepszym rozwiązaniem by uniknąć "niestandardowej" (względem innych języków) składni oraz dwuznacznego kodu.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #16





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


by_ikar:

w javie z tego co pamietam jest tak ze jak zrobisz zmienna lokalną mającą tą samą nazwę co pole to ta zmienna lokalna przysłania
widocznością pole w klasie. Wtedy do pola możesz się odwołać za pomocą this.pole. Jak widać również jest operator this, lecz korzysta
się z niego tylko gdy jest potrzebny. Zresztą w javie zazwyczaj zapisuje sie wtedy nazwe zmiennej lokalnej z podkreślnikiem z przodu lub z tyłu.

W C# i Pascalu/Delphi jest tak samo i uwazam to za duzo bardziej naturalne podejscie do tematu. W C++ nie wiem jak jest, podejrzewam ze podobnie jak w PHP bo tworcy PHP sami by raczej na to nie wpadli. Sorry, pojechałem na wymiane w tym semestrze kiedy mialem C++ a na codzien to język kompletnie nieprzydatny mi jak na razie więc go nie znam.

No i w pascalu na pewno są funkcje globalne i również nie jest to żadną przeszkodą, natomiast w Javie i C# jako językach obiektowych od początku już chyba tego nie ma.

Crozin to nie cztery znaki a 7:
  1. $this->


widzisz? 7.

W tym operator -> będący najbardziej durnym operatorem jaki kiedykolwiek na oczy widziałem. Jak mozna operator uzywany miliony razy w kodzie zrobić z dwóch znaków, w tym jeden wymagający nacisniecia shift? Kropka jest do tego znacznie lepsza i gdyby była nakładka na php pozwalająca na uzywanie . zamiast ->, oraz + zamiast . (operatora konkatenacji stringow ktory jest niezbyt intuicyjny, plus jest lepszy) to bym chetnie z takiej nakładki korzystał biggrin.gif

Byc moze byloby za duzo błędów logicznych gdyby zrobili bez obowiązkowego $this, bo twórcy nie pomysleli o deklarowaniu zmiennych.
głupie var $zmienna uratowałoby wiele programistów przed marnowaniem czassu na debugowanie literówek.

W zasadzie samo this nie jest problemem, problemem jest zapisanie tego durnego dolara i -> bo to te znaki sprawiaja ze nieprzyjemnie sie to pisze. Problemem w cudzyslowie oczywiscie bo jestem zdrowy nie jestem uposledzony i jestem w stanie to napisac, jednak troche mi to przeszkadza bo jest to niewygodne.

klasyczny przykład kiedy uproszczenie stało się utrapieniem biggrin.gif

Ja błagam stwórcę o to by zrobili świetne Mono na linuksa i wtedy wszystkie hostingi dodadzą opcje hostowania asp.net w cenie PHP
i będzie wreszcie mozna tworzyc strony w normalnym języku.


--------------------------------
zainspirowany postem by_ikar zmienilem w eclipse timeout podpowiadania skladni z 30 ms na 0 ms i faktycznie po wpisaniu
$t wyskakuje samo $this->, i nie trzeba naciskac ctrl + spacji. troche to ulatwia


method chaining - inspiracja z symfony? Wole nie wiedziec jak to wplywa na wydajnosc w takim jezyku jak PHP, bo wygladac to moze i wyglada fajnie..

Ten post edytował Orzeszekk 20.11.2011, 23:23:35


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
by_ikar
post
Post #17





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat
method chaining - inspiracja z symfony? Wole nie wiedziec jak to wplywa na wydajnosc w takim jezyku jak PHP, bo wygladac to moze i wyglada fajnie..


yy to nie jest inspiracja z symfony, akurat symfony i wiele innych FW, jak i klas to wykorzystuje. Jak wpływa na wydajność? Dokładnie ci nie powiem, ale wydaje mi się że to jest bez różnicy. Mam taki swój powiedzmy framework, w którym kilka obiektów korzysta z method chaining (sklejanie zapytań do bazy, paginator i coś by się jeszcze znalazło), a mimo to wyświetlenie podstrony (zalogowany użytkownik, jakieś 10 zapytań do bazy, szablon, jakieś dodatkowe pierdoły) a strona nie generuje się powyżej 400ms zużywając średnio 2-3mb.

Cytat
zainspirowany postem by_ikar zmienilem w eclipse timeout podpowiadania skladni z 30 ms na 0 ms i faktycznie po wpisaniu
$t wyskakuje samo $this->, i nie trzeba naciskac ctrl + spacji. troche to ulatwia


Nie wiem jak jest w eclipse, bo z niego nie korzystam, ale u siebie w phpdesigner wystarczy że wstawię dolara i już mam listę zmiennych które mogę użyć.
Go to the top of the page
+Quote Post
Orzeszekk
post
Post #18





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

Ostrzeżenie: (0%)
-----


Cytat(by_ikar @ 21.11.2011, 09:38:57 ) *
yy to nie jest inspiracja z symfony, akurat symfony i wiele innych FW, jak i klas to wykorzystuje. Jak wpływa na wydajność? Dokładnie ci nie powiem, ale wydaje mi się że to jest bez różnicy. Mam taki swój powiedzmy framework, w którym kilka obiektów korzysta z method chaining (sklejanie zapytań do bazy, paginator i coś by się jeszcze znalazło), a mimo to wyświetlenie podstrony (zalogowany użytkownik, jakieś 10 zapytań do bazy, szablon, jakieś dodatkowe pierdoły) a strona nie generuje się powyżej 400ms zużywając średnio 2-3mb.



Nie wiem jak jest w eclipse, bo z niego nie korzystam, ale u siebie w phpdesigner wystarczy że wstawię dolara i już mam listę zmiennych które mogę użyć.


Jak pisałem klase do generowania kodu HTML na podstawie obiektów PHP (mialem taki kaprys zeby np nie pisać <div arg1="cc" arg2="ff....></div> i nie mylic sie przy tym literówkami, to napisałem klase ktora wstawiala diva za pomocą new Block($parent, $content))
to metoda rekurencyjna generująca ten kod (tj rysuje <div, wszystkie argumenty, > i tutaj wywoluje draw dla wszystkich dzieci </div>) dzialala 20 razy wolniej niz metoda nierekurencyjna uzywajaca zamiast wywolan metod skoków goto w obrębie jednej metody.

W php sa wolne wywołania funkcji i nie szalałbym tutaj z nadmiernym robieniem funkcji wykonujących jedną linijkę kodu, sam pisząc nieraz mam opór by użyć getterów i setterów ale robie to dla dobra swojego i ogółu.

W php wg mnie akurat metod chaining jest kompletnie niepotrzebny bo mamy parametry opcjonalne.

konstrukcja zapytania do bazy rownie dobrze zamiast
$database->select()->from("fff")->where('xxx")...
moze wygladac
$database->select($filterExpression=null, $sortingExpression=null,$limit=null,$offset=null);
i kazdy wpisuje tyle parametrów ile mu potrzeba.

mnie sie wydaje ze method chaining moglo by nie miec wielkiej roznicy w wydajnosci w języku kompilowanym, chociazby do kodu bajtowego. natomiast w php będzie miało i ja kiedys nieopatrznie go uzyjesz w metodzie ktora jest wywoływana w skrypcie 1000 razy to sam sie bedziesz dziwil skąd ci sie wział extremalny czas generowania strony.


--------------------
"The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs
Go to the top of the page
+Quote Post
by_ikar
post
Post #19





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat
konstrukcja zapytania do bazy rownie dobrze zamiast
$database->select()->from("fff")->where('xxx")...
moze wygladac
$database->select($filterExpression=null, $sortingExpression=null,$limit=null,$offset=null);
i kazdy wpisuje tyle parametrów ile mu potrzeba.


Subtelna różnica akurat w tym przypadku jest taka, że mogę niektóre "argumenty" mieć w różnych miejscach:

Kod
$pagination->setTotalCount(12)->setCurrentPage(2);


a mogę to też w taki sposób zapisać:

Kod
$pagination->setCurrentPage(2)->setTotalCount(12);


Nie wiem jaki jest narzut, może ktoś ma jakiś mały test przeprowadzony.

Odnośnie generowania html poprzez php czy inne języki mam swoje zdanie, a jest ono takie że jest to zbędny narzut i jest mi to wcale do szczęścia nie potrzebne.
Go to the top of the page
+Quote Post
redeemer
post
Post #20





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


Z mojego doświadczenia method chaining nie wpływa na wydajność (mam na myśli serwery produkcyjne z cacheowaniem bytecode).


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 06:42