Vengeance
21.12.2004, 16:25:30
wiec napisalem sobie taki maly szybki kodzik:
<?php
class Foo
{
public function add($x)
{
self::$data[] = $x;
}
}
?>
i druga wersja
<?php
class Foo
{
public static function add
($x) {
self::$data[] = $x;
}
}
?>
"Test" wygląda tak:
<?php
Foo::add('123');
Foo::add('abc');
Foo::add('ABC');
?>
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ć

Dziękuje.
bela
21.12.2004, 16:38:39
wg mnie php nie jest restrykcyjny, np w javie takie cos by nie przeszło
hawk
21.12.2004, 17:08:33
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
21.12.2004, 17:19:36
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
21.12.2004, 18:28:57
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
21.12.2004, 22:17:49
Aha dziękuje za odpowiedzi

To rozjaśniło mi stan rzeczy

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.