Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Róznica między klasami
Forum PHP.pl > Forum > PHP > Object-oriented programming
gothye
witam
zaczynam OOP ale napotałem sie na 2 rózne zapisy klas PHP :


  1. class test
  2. {
  3. private static $foo = 'hello' ;
  4.  
  5. public function pokaz()
  6. {
  7. echo self::$foo ;
  8. }
  9. // nie dziala
  10. public function __construct()
  11. {
  12. echo 'hello' ;
  13. }
  14.  
  15. // nie dziala
  16. public function __destruct()
  17. {
  18. echo 'bye' ;
  19. }
  20. }
  21.  
  22. test::pokaz() ;
  23.  
  24. /*********** druga clasa *************/
  25. class test
  26. {
  27. private $foo = 'hello' ;
  28.  
  29. public function pokaz()
  30. {
  31. echo self::$foo ;
  32. }
  33. // dziala
  34. public function __construct()
  35. {
  36. echo 'hello' ;
  37. }
  38.  
  39. // dziala
  40. public function __destruct()
  41. {
  42. echo 'bye' ;
  43. }
  44. }
  45.  
  46. $test = new test();
  47. $test->pokaz();


może ktoś wyjaśnić gdzie i dlaczego sie stosuje zapisy ? i który jest prawidłowy ?
Spawnm
gothye, przeczytaj do końca rozdział poświęcony podstawom oop z książki/kursu z którego się uczysz a sam znajdziesz odpowiedź ...
gothye
nie korzystam z żadnej książki ,dlatego pytam na forum licząc na pomoc sad.gif
Spawnm
A z czego się uczysz ? Z manuala ? To tam jest na pewno wyjaśnione winksmiley.jpg
gothye
skoro niewiesz ,lub nie umiesz odpowiedzieć to moze chociaż podasz link ?
Spawnm
Sam nie potrafisz korzystać z manuala i szukajek ?
Poszukaj bo pytasz o podstawy.
JohnnyB
Cytat(gothye @ 31.05.2010, 18:05:39 ) *
może ktoś wyjaśnić gdzie i dlaczego sie stosuje zapisy ? i który jest prawidłowy ?


obie klasy są jak najbardziej prawidłowe smile.gif

różnica tkwi sposobie wywołania - w pierwszym przykładzie wywołanie jest statyczne, a więc nie jest w ogóle tworzony obiekt, więc nie ma okazji do wywołania konstruktora i destruktora.
zegarek84
Cytat(gothye @ 31.05.2010, 18:44:06 ) *
...to moze chociaż podasz link ?
Classes and Objects

niestety prawie wszystko w manualu jest po angielsku... jednak nie musisz dobrze znać angielski by rozumieć dokumentację - czytaj o funkcjach, w komentarzach i troche google zanim się przestawisz... każdy ogląda filmy to wyłącz sobie napisy - szybciej się przestawisz z myśleniem na angielski - co nie znaczy, że będziesz umiał mówić po angielsku - jednak szybciej nauczysz się go rozumieć...
zend
Pierwszy sposób nie ma prawa zadziałać, bo metoda którą podałeś nie jest statyczna
  1. class x{
  2. public static function pokaz() {}
  3. }
  4.  
  5. x::pokaz();


Statyczne wywołania są przydatne gdy nie chcesz / nie możesz utworzyć obiektu, dane statyczne mogą być współdzielone pomiędzy różnymi instancjami tej samej klasy. Jest to przydatna własność, ponieważ możesz np statycznie nawiązać połączenie w modelu, a każdy kolejny model będzie korzystał z tej samej instancji połączenia. Jest to dobre rozwiązanie gdy korzystasz z jednej bazy i nie chcesz się martwić o przekazywanie połączenia.

Jeśli natomiast korzystasz z dwóch baz, to współdzielenie jednego połączenia nie jest czymś czego oczekujesz ponieważ każdy model może chcieć skorzystać z innej bazy, wtedy korzystasz z niestatycnych metod, ale połączenie do bazy musisz ustawić sam, np jako parametr w konstruktorze
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.