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

Prywatne Metody. Php.

0 głosów
1,433 wizyt
pytanie zadane 20 czerwca 2015 w PHP przez HaKIM Szeryf (87,590 p.)

Cześć.

Jak zapewne wiecie, w PHP jest możliwość nadania metodzie przywatności.

private function funkcja()

Tylko nie mam zielonego pojęcia do czego mi taka funkcja się przyda. : C

Mógłby ktoś mnie oświecić, bo po dziś dzień będę zawsze pisał public.

Najlepiej jakby ktoś się wysilił i podał przykład zastosowania.

3 odpowiedzi

+3 głosów
odpowiedź 20 czerwca 2015 przez Comandeer Guru (607,960 p.)
wybrane 20 czerwca 2015 przez HaKIM
 
Najlepsza

Prywatne metody służą do ukrywania bebechów klasy oraz wykonywania wszystkiego, co nie powinno być dostępne z zewnątrz. Prawdę mówiąc klasa powinna mieć jak najmniej metod publicznych (które stanowią jej API).

Pierwszy przykład z brzegu: https://github.com/Auditr/Test/blob/master/src/Test.php
To prosta klasa testu. Każdy test może zostać odpalony przez usera, więc istnieje metoda publiczna to robiąca (Test::execute). Równocześnie każdy test wykonuje co innego, więc powstała druga metoda, prywatna (Test::run), która wykonuje całą czarną robotę. User musi dostać jedynie rezultat testu, więc Test::run go całkowicie nie interesuje. Interesuje go natomiast Test::execute, które mu zwraca ładny wynik. A to, co robi za kulisami, to już sprawa klasy.

komentarz 20 czerwca 2015 przez HaKIM Szeryf (87,590 p.)

Dość spory kod, jak na proste pytanie...

Czyli, mogę w 

public function funkcja()

Zastosować coś z prywatnej?

Na przykład w prywatnej funkcji mam:

private function prywatna($var)
{
    $var = 2; 
    $this->var = $var;
}

I teraz tworze publiczną:

public function publiczna($var)
{
    echo 2 + $var;
}

Ale... Do tego potrzebuje __constuct

	public function __construct($var)
	{
		$this->var = $var;
	}

Nie mogę powiedzieć iż w 100% zrozumiałem.

1
komentarz 20 czerwca 2015 przez Comandeer Guru (607,960 p.)

Inaczej: metody prywatne można wywołać tylko wewnątrz danej klasy (wywołanie poza wywali błąd):

<?php
class A
{
	public function jawnaOperacja()
	{
	}

	private function tajnaOperacja()
	{

	}
}

$a = new A();

$a->jawnaOperacja(); //gites majonez
$a->tajnaOperacja(); //mayday, wydało się!

I to jest główna różnica. Dlatego też w metodach prywatnych są wykonywane wszystkie te rzeczy, które nie interesują użytkownika, ale są niezbędne do działania klasy (np. user chce szynkę, więc metoda publiczna to wyprodukujSzynke - usera nie interesuje, że gdzieś w tym procesie zostanie wykonana metoda zabijSwinke):

<?php
class Rzeznik
{
	public function wyprodukujSzynke()
	{
		$this->zabijSwinke();
		$this->pokrojMiecho();
		$this->upieczMiecho();

		return 'szynka';
	}

	private function zabijSwinke() {}

	private function pokrojMiecho() {}

	private function upieczMiecho() {}

}

$rzeznik = new Rzeznik();

echo $rzeznik->wyprodukujSzynke();

 

komentarz 20 czerwca 2015 przez efiku Szeryf (75,160 p.)

Zwróć uwagę też, że  Comandeer zwrócił wartość tej funkcji, a nie wyświetlił za pomocą echo w funkcji :) 

komentarz 20 czerwca 2015 przez HaKIM Szeryf (87,590 p.)
No i teraz kumam. Dzięki. :)
komentarz 20 czerwca 2015 przez HaKIM Szeryf (87,590 p.)
Niestety z tego wynika że gdybym moją stronę wydał w internet, musiałbym sporo rzeczy przerobić. ;D
+1 głos
odpowiedź 20 czerwca 2015 przez Boshi VIP (100,240 p.)
Ciężko mi tak z głowy wymyśleć, ale na jakiś wykładzie odnośnie obiektówki w php wiedziałem przykład zastosowania tego  w połaczeniu  z  innymi funkcjami gdzie te drugie-publiczne operowały na prywatnej.

np

http://www.php5dp.com/private-methods-in-php/

 

Generalnie  funkcje publiczne udostepniają  pewne publiczne funkcjonalności, ale  nikt nie musi wiedzieć z zewnątrz, że ta funkcja akurat operujue na 10 innych prywatnych.
+1 głos
odpowiedź 20 czerwca 2015 przez efiku Szeryf (75,160 p.)
edycja 20 czerwca 2015 przez efiku
Hmm moim zdaniem przydaje się w momencie gdy chcesz wykonać jakąś logikę w klasie, a nie chcesz, aby przypadkowo ktoś ją wywołał - bo może to mieć jakieś złe skutki.
Może taki prosty przykład.
http://pastebin.com/2rZ51mq4
w whorepressie byla funkcja od szablonu get_field('datetime') która zwracała datę "22/06/2015 22:15", ta klasa odpowiednio preparuje datę na wejściu, nie chce aby ktoś użył metody clearString więc daję ją private. ( przerobiłem na podstawie tej klasy: http://pastebin.com/2eSvBAPe )
Może ktoś inny Ci to lepiej wytłumaczy :D
PS: Jak już się uczysz OOP to warto powoli czytać o SOLID.
komentarz 20 czerwca 2015 przez HaKIM Szeryf (87,590 p.)
SOLID... Nie słyszałem.
komentarz 20 czerwca 2015 przez Comandeer Guru (607,960 p.)
https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design → w gruncie rzeczy to są bardzo proste zasady i da się je wymyśleć samemu ;)

Podobne pytania

0 głosów
1 odpowiedź 733 wizyt
pytanie zadane 17 lutego 2018 w PHP przez sapero Gaduła (4,100 p.)
0 głosów
1 odpowiedź 1,095 wizyt
pytanie zadane 22 lipca 2015 w PHP przez Furionpl Początkujący (370 p.)
+1 głos
1 odpowiedź 574 wizyt
pytanie zadane 26 czerwca 2015 w PHP przez HaKIM Szeryf (87,590 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,326 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...