Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php5] i slowko 'static'
Forum PHP.pl > Forum > PHP > Object-oriented programming
Vengeance
wiec napisalem sobie taki maly szybki kodzik:
  1. <?php
  2. class Foo
  3. {
  4.  public static $data;
  5.  
  6.  public function add($x)
  7.  {
  8. self::$data[] = $x;
  9.  }
  10. }
  11. ?>

i druga wersja
  1. <?php
  2. class Foo
  3. {
  4.  public static $data;
  5.  
  6.  public static function add($x)
  7.  {
  8. self::$data[] = $x;
  9.  }
  10. }
  11. ?>


"Test" wygląda tak:
  1. <?php
  2. Foo::add('123');
  3. Foo::add('abc');
  4. Foo::add('ABC');
  5. print_r(Foo::$data);
  6. ?>

A teraz pytanie. Na czym polega wstawianie słówka "static" przed nazwy metod skoro tak czy tak działa. Pewnie to jest za prosty przykład aby odczuć różnicę ale chce ją poznać smile.gif

Dziękuje.
bela
wg mnie php nie jest restrykcyjny, np w javie takie cos by nie przeszło
hawk
Static przed metodą polega na tym, że można ją wywoływać bez obiektu, tak jak w przykładzie.

A działa w obu przypadkach, ponieważ PHP4 pozwalał na użycie dowolnej metody w kontekście statycznym, jeżeli tylko nie operowała na $this. PHP5 musiało być kompabybilne wstecz, i stąd rezultat.

Czyli tak naprawdę słowo static nigdy nie jest potrzebne przed metodą, ale i tak warto je stosować, chociaż tylko dla porządku i dokumentacji kodu.
DeyV
Poza tym, dzięki użyciu static przed nazwą metody, sprawdzanie, czy nigdzie nie zostało wykorzystane $this, wykonywane jest już na poziomie parsowania pliku.
Pozwala to na znacznie wcześniejsze wykrywanie błędów, które w innym przypadku mogą nas mocno zaskoczyć w najmniej odpowiednim momencie.
shima
Słowo kluczowe static zostało wprowadzone, aby można było definiować składniki na rzecz klasy, nie konkretnego obiektu. Zalet jest wiele, oszczedność pamięci (w przypadku php to akurat mniejsza zaleta), jako licznik wywołań... Jest to niejako składnik klasy i zarazem każdego jej obieku. Jako że jest składniekiem klasy, to można na nim operować używając metody, która ma prawo operować. Jeżeli jednak mamy składnik statyczny, to zapewne stworzyliśmy go w pewnym celu: aby był dostępny nawet wtedy, gdy nie ma jeszcze żadnego obiektu. I do tego potrzebne są statyczne metody. A użycie funkcji niestatycznej na rzecz klasy w ogóle mi się nie podoba.
Vengeance
Aha dziękuje za odpowiedzi smile.gif To rozjaśniło mi stan rzeczy smile.gif

Ide dalej "poznawac" zalety php5 ;]
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.