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

Może mi ktoś wyjaśnić jak to działa?

VPS Starter Arubacloud
0 głosów
172 wizyt
pytanie zadane 2 listopada 2018 w PHP przez Krzysio4224 Obywatel (1,690 p.)

Cześć!

Ostatnio natknąłem się na zapis typu:

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

i nie wiem co oznacza dodanie LoggerInterface do argumentu funkcji (chciałem poszukać na internecie ale nawet nie wiem jak to wpisać), i od razu mam pytanie, jakby to była zwykła funkcja i dajmy na to byłby ten LoggerInterface $logger i dajmy na to chciałbym dołożyć jeszcze argument $number, to teraz w jaki sposób mógłbym wywołać taką funkcję?

1 odpowiedź

+1 głos
odpowiedź 2 listopada 2018 przez Michał Kazula Pasjonat (19,540 p.)
wybrane 2 listopada 2018 przez Krzysio4224
 
Najlepsza
Ktoś zastosował w ładny sposób typowanie. Argument $logger przekazany do konstruktora klasy musi być typu LoggerInterface, co oznacza że pewnie LoggerInterface jest jakąś klasą.

Jak chcesz dodać nowy argument do tej metody to stawiasz "," (przecinek) i dodajesz :-)
komentarz 2 listopada 2018 przez Krzysio4224 Obywatel (1,690 p.)

co daje takie typowanie?, znaczy bardziej chodziło mi potem żeby np wywołać funkcję czyli jak mamy 

public function abc(LoggerInterface $logger, $number)
{
     $this->logger = $logger;

     return $number;
}

i teraz chce wywołać funkcje i dodać liczbę czyli robię tak

$class = new Class;

$class->abc(5);

tylko w tym przypadku pierwszy argument to LoggerInterface, jak rozwiązać ten problem?

 

1
komentarz 2 listopada 2018 przez Michał Kazula Pasjonat (19,540 p.)

Usuń z metody LoggerInterface i nie będziesz miał problemu.

Nie zrozumiałeś lub źle zadałeś pytanie.

Po-prostu chciałeś napisać nową metodę (funkcję) w klasie.

Tak powinno być:

$logger = new LoggerInterface;
$class = new Class($logger, 5);
$class->logger;

Tak chciałeś:

public function setNumber($number)
{
     $this->number = $number;
}

public function getNumber()
{
     return $this->number;
}

$class = new Class;

$class->setNumber(5);
$class->getNumber();

 

1
komentarz 2 listopada 2018 przez adrian17 Ekspert (344,100 p.)

$logger = new LoggerInterface;

(jeśli ma w nazwie Interface, to pewnie nie chcieli by był bezpośrednio tworzony)

komentarz 2 listopada 2018 przez Krzysio4224 Obywatel (1,690 p.)
znaczy ten LoggerInterface to taki przykład, mógłbym np dodać jakąś swoją klasę do argumentu?, dzięki Michał już bardzo mi się rozjaśniło
1
komentarz 2 listopada 2018 przez Michał Kazula Pasjonat (19,540 p.)
Owszem, ale tego niewiesz i ja również bo nie mamy wglądu w tą klasę. Ale wystarczy aby klasa miała implementację (implements) klasy LoggerInterface.
komentarz 2 listopada 2018 przez Krzysio4224 Obywatel (1,690 p.)
do argumentu mogę przesłać tylko interface czy mogę napisać jakąś swoją nową klasę i dodać jako argument, gdzie się wykorzystuje typowanie?
2
komentarz 2 listopada 2018 przez Michał Kazula Pasjonat (19,540 p.)
Tylko interface? A skąd taki wniosek?

Możesz napisać klasę i kazać być argumentowi typem tej klasy.

Typowanie powiadasz. To bardzo potrzebny zabieg o którym niestety programiści nie pamiętają.

Wyobraź sobie że piszesz stronę do rysowania wykresu (osie X i Y). Do narysowania na wykresie punktu masz metodę która musi przyjąć odpowiedni obiekt: PunktXY składający się z dwóch właściwości X i Y.

Możesz do metody przekazać co prawda tablicę dwuargumentową, ale to nie jest dobra praktyka. Bo za chwile będziesz chciał coś z tymi punktami robić, np dodać kolor, kształt, itp.
komentarz 2 listopada 2018 przez Krzysio4224 Obywatel (1,690 p.)
Dziękuje, teraz już mniej więcej wiem.

Podobne pytania

0 głosów
1 odpowiedź 460 wizyt
pytanie zadane 11 stycznia 2021 w PHP przez Głupia546 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 124 wizyt

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...