Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Singleton
keedy
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Gliwice

Ostrzeżenie: (10%)
X----


Własnie. O co chodzi w tym calym singletonie? keidy i po co bo uzywac?

prosilbym o jakies linki, jedyne co narazie wiem to to, ze ma się cos on do metod statycznych(static).


--------------------
Go to the top of the page
+Quote Post
M4chu
post
Post #2





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

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


Signleton jest wzorcem projektowym (ang. pattern). Na tym forum mozna znalezc opis tego wzorca + duzo przykladow implementacji, wystarczy poszukac.
Btw Wpisz w google 'singleton pattern' i od razu dostaniesz mnostwo linkow (szczegolnie polecam Portland Pattern Repository - bardzo duzy zbior patternow).
Go to the top of the page
+Quote Post
keedy
post
Post #3





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 18.12.2003
Skąd: Gliwice

Ostrzeżenie: (10%)
X----


a gdzie mozna znales jakis konkretny art o oop w php5, bo w manualu sa komentarze, bo malo opisali oop5, albo uzywanie "interfaces" ? sory ze tak truje smile.gif


--------------------
Go to the top of the page
+Quote Post
bela
post
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


na zendzie masz troche, ale lepiej Eckela poczytaj smile.gif


--------------------
Go to the top of the page
+Quote Post
Strzałek
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


No więc tak. Singleton to wzorzec projektowy przydatny, kiedy trzeba utworzyć obiekt, który powinien być dostępny dla różnych, odręnych części aplikacji. W szeczólności jeżeli obiekt ten ma zawierać dużą ilość informacji, to każdorazowe tworzenie jego egzemplarza może okazać się niezwykle mało efektywne. A tutaj mogę Ci pokazać przykład zastosowania singleton'a w praktyce:

http://www.opb.ibplanet.pl/work/dev/bela_666/belacms/ oczywiście autor - bela_666


--------------------
Go to the top of the page
+Quote Post
reemii
post
Post #6





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 2.02.2005

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


Albo artykuł po polsku
Go to the top of the page
+Quote Post
cagrET
post
Post #7





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Opole

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


Zamiast singletona możesz używać z powodzeniem zmiennych globalnych smile.gif

na początku
  1. <?php
  2.  
  3. global $MojObiekt;
  4. $MojObiekt = new MojObiekt();
  5.  
  6. ?>


później wszędzie w aplikacji
  1. <?php
  2.  
  3. global $MojObiekt;
  4. $MojObiekt->zrobCos('!!!');
  5.  
  6. ?>


Zawsze używasz tego samego obiektu, po co komplikować sobie życie jakimiś wzorcami projektowymi smile.gif

Teraz trochę o wzorcach, nie mówię o tym konkretnym przypadku tylko ogólnie. Wzorce projektowe są to rozwiązania do pewnych problemów, nie znaczy, że są jedynym słusznym rozwiązaniem i że zawsze należy je stosować gdzie tylko się da, to programista jest od tego żeby zdecydować co jest słuszne a co nie, na podstawie własnego doświadczenia, musi myśleć gdy pisze aplikację, należy na to spojrzeć pod kątem problemu, który nasz program ma rozwiązać, prostota rozwiązania, bo jeżeli użycie jakiegoś wzorca nie da nam za dużych korzyści a tylko skomplikuje życie, to nie stosujcie go, jeżeli macie inne lepsze rozwiązanie, które się sprawdzi w waszej aplikacji to je zastosujcie, i nie słuchajcie innych mądrali, którzy wam powiedzą, że jesteście głupi, bo nie użyliście tego czy tamtego wzorca, to oni są głupi bo wszystko chcą na siłę wepchnąć do swojej aplikacji, myślą w imię stosowania wzorców projektowych, w imię, że to musi być "poprawnie" zrobione, a stosowanie wzorców jest jedynym takim słusznym rozwiązaniem! To tak samo jak z programowaniem obiektowym, mamy napisać jakąś prostą aplikację, programista Java, powie, że to musi być zrobione w jedyny słuszny i poprawny sposób, będzie się męczył kilka dni, napisze setki obiektów, tysiące linijek kodu, program będzie zżerał megabajty pamięci etc. Sprytny hacker phpowiec myśli o rozwiązaniu problemu, jeżeli może to shackować za pomocą kilku funkcyjek i strasznie pomieszanego kodu spaghetti to może to być o wiele lepsze i wydajniejsze rozwiązanie, napisane w kilka godzin, co z tego, że jest napisane brzydko, skoro to DZIAŁA! i rozwiązuje nasz problem, co z tego, że jest to źle zrobione, bez zastosowania jedynych i słusznych wzorców projektowych. On to zrobił, to działa, tylko to się liczy. Także moja rada dla wszystkich młodych niedoświadczonych talentów: myślcie, myślcie i jeszcze raz myślcie! Nie pozwólcie by inni myśleli za was smile.gif


--------------------
code.gosu.pl
Go to the top of the page
+Quote Post
DeyV
post
Post #8





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




No cóż - dla osób wierzących, że każdy patterns jest dobry, i że warto wykorzystywać wszystkie na raz - polecam uroczy przykład: http://www.phppatterns.com/index.php/artic...leview/103/1/1/

Niestety - to byłoby wszystko, z czym moge się zgodzić z przedmówcą. Bowiem w przypadku programowania w php praktycznie nie ma miejsca na "brzydki" kod. Bo o ile jeszcze kod takowy można stolerować w przypadku bibliotek napisanych w c, które są kompilowane i zapomina się o tym, co jest w środku, to w przypadku kodu php, ten jest poprawiany, modyikowany i dopieszczany na dziesiątki sposobów i możliwości.
Taka natura tego języka. A jeśli jeszcze do jakiegoś projektu chce się zabrać kilka osób, to próba pisania "hackerskiego" staje się prawdziwym wyczynem.
Wtedy właśnie okazuje się, że singeleton nagle staje się znacznie bezpieczniejszy i łatwieszy do skontrolowania, niż zmienna globalna (choćby dlatego, że nie da się go nadpisać) a inne patternsy są przyjmowane wręcz z radością - ponieważ już po jednym rzucie okiem na nazwe klasy można (przynajmniej w teori winksmiley.jpg ) powiedzieć, jak bedzie działać.
I niezależnie od tego, że taki kod również można strasznie skomplikować, i uczynić strasznie zawilym (programistom OOP zdaża się to zresztą bardzo często) to jednak z natury jest bezpieczniejszy i łatwiejszy do modyfikacji (nie koniecznie oznacza to, że jest również łatwiejszy do zrozumienia)

No - ale to tyle gwoli mowy o samym OOP i różnych patternsach.
A wracając do singletona - jeśli ktoś pisze w php5, to uważam, że jest to pierwszy pattern, który powinien poznać, zrozumieć, i zacząć stosować.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
cagrET
post
Post #9





Grupa: Zarejestrowani
Postów: 90
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Opole

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


Ja nie zaprzeczam tego co napisałeś, możliwe, że w większości sytuacji zastosowanie tego będzie najlepszym rozwiązaniem, ale o tym powinień ktoś zadecydować, a nie na siłę pchać wszystko, o to mi chodzi, staram się tylko uświadomić, że są także inne opcje! I możliwe, że w niektórych sytuacjach będą lepszym rozwiązaniem.

Co do brzydkiego kodu .. mamy po prostu inne definicje tego słowa, ja nie znam się na brzydkim kodzie c/c++, więc jakbym go poznał, pewnie słowo "brzydki kod php" zamieniłbym na "niezbyt ładny kod php" smile.gif


--------------------
code.gosu.pl
Go to the top of the page
+Quote Post
awides
post
Post #10





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2004

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


  1. <?php
  2.  
  3. class Singleton
  4. {
  5. private static $zmienna = false; //def. i inicjalizacja...
  6. public $wlasnosc; //def.
  7.  
  8. private function __construct(){}
  9. public static function wezZmienna()
  10. {
  11. if (self::$zmienna === false) { 
  12. //$zmienna nie moze miec wartosci typu int (0)... 
  13. self::$zmienna = new Singleton;
  14. }
  15. return self::$zmienna;
  16. }
  17. }
  18.  
  19. $a = Singleton::wezZmienna();
  20. $b = Singleton::wezZmienna();
  21. $a->wlasnosc = &#092;"Hello World!\";
  22. echo $b->wlasnosc;
  23. ?>


co my tu mamy ?
#1 nie można utworzyć obiektu poza klasą (poprzez new Singleton) [prywatny konstruktor]
#2 obiekt a i b korzystają z tej samej zmiennej (a w zasadzie z tego samego egzemplarza), dlaczego ?
-przypadek pierwszy (utworzenie indywiduum a)
$zmienna statyczna ma wartość false -> instrukcja sterująca korzystając z powyższej zmiennej (false) tworzy obiekt statyczny wewnątrz funkcji -> $zmienna (obiekt) jest zwracana
-przypadek drugi (utworzenie obiektu cool.gif
$zmienna statyczna ma wartość false -> instrukcja sterująca umieszczona wewnątrz funkcji nie korzysta ze zmiennej utworzonej na początku klasy (o wartości false) tylko z wcześniej utworzonego obiektu (kopia zmiennej lokalnej) w tej funkcji -> $zmienna jest zwracana (defacto została stworzona wcześniej)

#3 $a->wlasnosc = "Hello World!"; -> modyfikuje globalny (pojedyńczy) obiekt wygenerowany przez klasę

#4 funkcja wezZmienna() korzysta z wzorca Factory


powyższy post jest efektem głębokich przemyśleń autora nad wzorcem typu Singleton i jest prawdopodobnie blink.gif opisem działania tegoż wzorca, the end...


--------------------
redFox |||||||||| 30%
----------------------------------
Go to the top of the page
+Quote Post

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: 19.08.2025 - 07:20