Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ile parametrów przyjmuje funkcja
Forum PHP.pl > Forum > PHP
kfc4
Witam,
Poszukuje funkcji, która powie mi ile parametrów przeyjmuje funkcja.
Np.
public function foobar() { ... }

ile(foobar) - da 0, a

public function foobar($i, $r) da mi 2.

Istnieje coś takiego? Jak nie to jak rozwiązać ten problem? Dokładnie chodzi mi o to, że jak funkcja czegoś oczekuje to dostanie tablice, a jak nie to zostanie wywołana bez parametrów.
thomas2411
Ta funkcja pokazuje liczbę przekazanych:
func_num_args" title="Zobacz w manualu PHP" target="_manual

A ile przyjmuje to nie kojarzę...

P.S. A tak właściwie to do czego Ci to potrzebne? W sumie powinieneś wiedzieć ile funkcja powinna przyjmować.
kfc4
Coś podobnego do powidzmy frameworka. W zależności od tego co chce programista dostanie to na podstawie ilości argumentów, które przyjmje funkcja.

Chyba, że można zrobić coś takiego:
  1. <?php
  2. public function funkcja() { ... }
  3.  
  4. $klasa->funkcja($tablica);
  5. ?>

I wtedy nic się nie stanie. Funkcja nie dostanie tej tablicy/zignoruje ją.
  1. <?php
  2. public function funkcja($tablica) { ... }
  3.  
  4. $klasa->funkcja($tablica);
  5. ?>

I funcja pobierze sobie tę tablicę, a programista ją obsłuży jak sobie chce.

Przejdzie coś takiego? Nie testowanie, ale mam wrażenie, że się wysypie.
sowiq
Wypróbuj coś takiego:
  1. <?php
  2. function test($arg = 'domyślny argument', $numer = 0){
  3.    if($numer != 0)
  4.        echo $numer . '. ';
  5.    echo $arg;
  6. }
  7.  
  8. test('to tylko test', 18);
  9. test('to tylko test');
  10. test();
  11. ?>

Bo jeżeli dobrze zrozumiałem, to o to Ci chodziło.
singles
Tobie chyba chodzi o przeciążanie funkcji/metod, którego to PHP standardowo nie obsługuje.
Kiedy zachodzi potrzeba podobnego rozwiązania, to można skorzystać właśnie func_num_args. Na poniższym przykładzie (jeśli chodzi Ci o przeciążanie):
  1. <?php
  2. function zrobCos() {
  3.   if (func_num_args() == 2) {
  4.       funkcjaNaDwaArgumenty(func_get_arg(0), func_get_arg(1));
  5.   } else {
  6.       funkcjaBezArgumentow();
  7.   }
  8. }
  9. ?>


Istnieje też coś takiego, jak argumenty domyślne - tak jak sowiq napisał.
kfc4
Tak, o to chodziło. Zapomniałem, że istnieje coś takie w np. C++, to bym rzucił przykładem z tego języka.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.