Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php5] i slowko 'static'
Vengeance
post
Post #1





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Dziękuje.
Go to the top of the page
+Quote Post
bela
post
Post #2


Administrator PHPedia.pl


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

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


wg mnie php nie jest restrykcyjny, np w javie takie cos by nie przeszło
Go to the top of the page
+Quote Post
hawk
post
Post #3





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


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.
Go to the top of the page
+Quote Post
DeyV
post
Post #4





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




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.
Go to the top of the page
+Quote Post
shima
post
Post #5





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

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


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.
Go to the top of the page
+Quote Post
Vengeance
post
Post #6





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Aha dziękuje za odpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) To rozjaśniło mi stan rzeczy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ide dalej "poznawac" zalety php5 ;]
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 13:06