czy dobrze rozumiem ze metoda to po prostu funkcja w klasie?
Z grubsza - tak.
Do czego sluzy w php opcja static function?
Aby móc się odwoływać do statycznych składowych klasy.
Statyczne składowe:
class Foo
{
// Składowa.
static private $number = 0;
}
Dodatkowo, nie potrzebujemy tworzyć zmiennej, która reprezentowałby obiekt klasy. Zamiast tego korzystamy z operatora: ::.
Przykład:
// Bar to statyczna metoda.
print Foo::bar();
Zamiast:
$foo = new Foo();
$foo->bar();
W metodach statycznych możemy odwoływać się do składowych statycznych za pomocą słowa kluczowego self.
Więcej słów kluczowych(Special keywords - Tłumaczenia pewien nie jestem), znajdziesz tutaj:
http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php
Przykład:
static private $number = 0;
public static function bar()
{
self::$number;
}
Po co nam one?
Cóż, dzięki temu, że możemy odwoływać się do nich bezpośrednio z klasy, nie potrzebujemy przekazywać obiektu, dzięki któremu wywoływalibyśmy metodę. Są dostępne w dowolnym skrypcie, gdzie mamy dostęp do danej klasy.
Dodatkowo, statyczne są dostępne dla każdej klasy (która, oczywiście, ma do dostęp do tej z wywoływaną składową).
Przykład:
class Foo
{
static private $number = 0;
public static function bar()
{
self::$number++;
return self::$number;
}
}
class Bar
{
public function foo()
{
return Foo::bar();
}
}
$bar = new Bar();
print $bar->foo(); // Zwróci: 1
Lub, równie użyteczne:
class Foo
{
static private $number = 0;
public static function bar()
{
self::$number++;
return self::$number;
}
}
class Bar
{
public function foo($number)
{
return $number * 60;
}
}
$bar = new Bar();
print $bar->foo(Foo::bar()); // Zwróci: 60
Należy również zwrócić uwagę na pewną notkę w dokumentacji:
Warning
In PHP 7, calling non-static methods statically is deprecated, and will generate an E_DEPRECATED warning. Support for calling non-static methods statically may be removed in the future
Miłej nocy.
Jeżeli się w czymś machnąłem, to proszę o poprawienie w komentarzu. :)
Źródła: