• 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
116 wizyt
pytanie zadane 26 czerwca 2016 w PHP, Symfony, Zend przez HaKIM Maniak (69,740 p.)

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 xandros Pasjonat (22,620 p.)
wybrane 26 czerwca 2016 przez 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 HaKIM Maniak (69,740 p.)
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 Porcupine Nałogowiec (31,670 p.)

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

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

komentarz 26 czerwca 2016 przez xandros Pasjonat (22,620 p.)
komentarz 26 czerwca 2016 przez HaKIM Maniak (69,740 p.)
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 Magicone Nałogowiec (44,120 p.)
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 xandros Pasjonat (22,620 p.)

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 Comandeer Ekspert (346,680 p.)

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 212 wizyt
+2 głosów
1 odpowiedź 81 wizyt
pytanie zadane 3 dni temu w PHP, Symfony, Zend przez ŁukaszD. Początkujący (300 p.)
...