• 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?

0 głosów
458 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,520 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,520 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 Mentor (355,180 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,520 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,520 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ź 1,047 wizyt
pytanie zadane 11 stycznia 2021 w PHP przez Głupia546 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 494 wizyt

93,741 zapytań

142,676 odpowiedzi

323,294 komentarzy

63,323 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.

...