• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Static function/method

Object Storage Arubacloud
0 głosów
913 wizyt
pytanie zadane 28 października 2016 w PHP przez Alex.Ironside Stary wyjadacz (14,900 p.)
Witam. Mam takie pytanko. Do czego sluzy w php opcja static function? I czy dobrze rozumiem ze metoda to po prostu funkcja w klasie? Jesli nie to prosilbym o wyjasnienie czym sie roznia i jak sie rozni zastosowanie static do nich? Szukalem na necie ale wszedzie niejasno wyjasnione.
komentarz 28 października 2016 przez Szymon Lisowiec Mądrala (7,150 p.)
https://pl.wikibooks.org/wiki/PHP/Elementy_statyczne

Tutaj jest chyba mądrze wytłumaczone, nie tylko metodami.

1 odpowiedź

+4 głosów
odpowiedź 28 października 2016 przez HaKIM Szeryf (87,590 p.)
wybrane 29 października 2016 przez Alex.Ironside
 
Najlepsza

 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:

 

komentarz 29 października 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
Czyli static to po prostu globalna funkcja? Bo statyczna zmienna przy kazdym wywolaniu fcji pamieta swoja ostatnia wartosc. Statyczna fcja jest jakby globalna i tez pamieta swoja wartosc? Bo wyjasnione swietnie ale nie do konca kminie
1
komentarz 29 października 2016 przez HaKIM Szeryf (87,590 p.)
edycja 29 października 2016 przez HaKIM

Czyli static to po prostu globalna funkcja?

Hmmm... Tak bym tego nie ujął.

Popatrzmy choćby na ten kod:

namespace Foo{
	class Foo
	{
		private static $number = 0;
		
		public static function bar()
		{
			return self::$number + 1;
		}
	}
}

namespace Bar{
	class Bar
	{
		public function foo()
		{
			return \Foo\Foo::bar();
		}
	}
	
	$bar = new Bar();
	print $bar->foo();
}

Aby odwołać się do statycznej metody: bar klasy Foo musiałem dodać przestrzeń nazw. W tym przypadku jest to: Foo. Czyli, aby dostać się do takowej metody statycznej muszę udostępnić klasę w której się znajduje poprzez: include require use / extends lub jeszcze inaczej.

Globalne zmienne to zło - Objaśnione w wielu ale to wielu wpisach na blogach/forach, także tutaj - korzystanie z statycznych składowych jest o wiele lepszym rozwiązaniem.

Statyczna fcja jest jakby globalna i tez pamieta swoja wartosc? 

Tak, pamięta.

Polecam Ci strony jak:

Nie musisz tworzyć plików .php - wystarczy napisać kod. Więc, wszelkie wątpliwości mogą być rozwiązane w trymiga.

Koniecznie zajrzyj tutaj:

http://php.net/manual/pl/language.variables.scope.php#language.variables.scope.static

Wszystko o zasięgach zmiennych.

Odwołanie do strony:

https://pl.wikibooks.org/wiki/PHP/Elementy_statyczne

Przez użytkownika Szymon Lisowiec, tam został temat statycznych w php wyczerpany. :)

komentarz 29 października 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
Czyli statyczne fcje mozna wywolac bez "$ziemniak = new plant"  i pamietaja swoje wartosci. Dobrze rozumiem?
1
komentarz 29 października 2016 przez HaKIM Szeryf (87,590 p.)

Między innymi.

Nawet podałem przykład:

Przykład:

PHP

// Bar to statyczna metoda.

print Foo::bar();

Zamiast:

PHP

$foo = new Foo();

print $foo->bar();

komentarz 29 października 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
Ok dzieki chcialem sie upewnic.

Podobne pytania

0 głosów
2 odpowiedzi 722 wizyt
0 głosów
1 odpowiedź 702 wizyt
pytanie zadane 9 kwietnia 2019 w C# przez rav89lodz Użytkownik (590 p.)
0 głosów
1 odpowiedź 200 wizyt
pytanie zadane 20 stycznia 2019 w Java przez ShockOfficial Początkujący (390 p.)

92,565 zapytań

141,416 odpowiedzi

319,597 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...