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

Jak napisać metodę, która będzie mogła obsłużyć niewiadomą liczbę argumentów?

0 głosów
113 wizyt
pytanie zadane 26 czerwca 2016 w PHP, Symfony, Zend przez użytkownika HaKIM Maniak (67,400 punkty)

Hej,

Mam problem. Otóż nie wiem jak stworzyć metodę, w języku php, do której będzie można włożyć niewiadomą liczbę argumentów, a ona się nie wysypie.

Trochę dokładniej:

Załóżmy, iż mamy taki kod:

$class = new Class();
$class->method('argument1', 'argument2');

Nasza metoda wygląda mniej więcej tak:

public function method($argument1, $argument2)
{
    echo $argument1 . $argument2;
}

- Wszystko cacy. Ale...

Co jeśli dodamy kolejny argument?

$class->method('argument1', 'argument2', 'argument3');

 - Program się wyspie.

Więc moje pytanie brzmi: Jak stworzyć metodę, która byłaby gotowa na jakąkolwiek ilość dodanych składowych?

3 odpowiedzi

+6 głosów
odpowiedź 26 czerwca 2016 przez użytkownika xandros Pasjonat (17,380 punkty)
wybrane 26 czerwca 2016 przez użytkownika HaKIM
 
Najlepsza

http://php.net/manual/en/function.func-get-args.php

function methodName(){
    $arguments = func_get_args();
}

lub

function methodName(...$arguments){
   /** @var $arguments array */
}

 

komentarz 26 czerwca 2016 przez użytkownika HaKIM Maniak (67,400 punkty)
Dokładnie o to mi chodziło!

Dziękuję!

Nie będę się musiał bawić w foreach, i inne cuda. ;_;
+1 głos
odpowiedź 26 czerwca 2016 przez użytkownika Porcupine Nałogowiec (31,710 punkty)

http://php.net/manual/en/functions.arguments.php

Pod nagłówkiem: "Variable-length argument lists" :) ¶

komentarz 26 czerwca 2016 przez użytkownika xandros Pasjonat (17,380 punkty)
komentarz 26 czerwca 2016 przez użytkownika HaKIM Maniak (67,400 punkty)
Hmm... Nie koniecznie chodziło mi o to, o czym piszesz. Tak czy owak, z Twojego linku udało mi się wyczytać to, co było mi potrzebne.

Dziękuję za pomoc.

Tematu jeszcze nie zamykam, gdyż może pojawić się pewien błąd, którego nawiasem mówiąc się spodziewam.
0 głosów
odpowiedź 26 czerwca 2016 przez użytkownika Magicone Nałogowiec (35,700 punkty)
Hmm… tbh zasady czystego kodu "zabraniają" tworzenia funkcji/metod wymagających więcej niż 3 argumenty (ba, nawet 3 to już jakaś wyższa konieczność). Prawda jest taka, że powinny być one zastępowane obiektami odpowiedniej klasy, bądź po prostu tablicami.
1
komentarz 26 czerwca 2016 przez użytkownika xandros Pasjonat (17,380 punkty)

zapomniałeś o `sprintf`

listy argumentów jak w funkcji „printf” są w porządku nawet jeśli pozornie przekazujemy ich np. 5, bo tak samo traktujemy wszystkie argumenty z listy argumentów

I wydaje mi się, że właśnie o taką budowe jemu chodzi. 

komentarz 26 czerwca 2016 przez użytkownika Comandeer Ekspert (332,400 punkty)

tbh zasady czystego kodu "zabraniają" tworzenia funkcji/metod wymagających więcej niż 3 argumenty (ba, nawet 3 to już jakaś wyższa konieczność)

Zgodnie z OOP, używanie $this już świadczy o tym, że nasz kod nie jest tak czysty jak mógłby → https://r.je/this-keyword-isnt-oop.html

Także co do czystego kodu moja odpowiedź jest zawsze taka sama: nie dajmy się zwariować. 

Podobne pytania

0 głosów
3 odpowiedzi 201 wizyt
pytanie zadane 28 czerwca 2015 w Inne języki przez użytkownika Mavimix Gaduła (3,690 punkty)
0 głosów
2 odpowiedzi 101 wizyt
pytanie zadane 29 stycznia w PHP, Symfony, Zend przez użytkownika chmod Mądrala (5,820 punkty)
...