Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak sprawdzić czy argument funkcji jest podany?
Forum PHP.pl > Forum > Przedszkole
pawel.ad
Witam!

Nie wiem jak sprawdzić czy argument X w funkcji jest podany.
Zwykłe isset() wywala błąd:

Fatal error: Can't use function return value in write context in /var/www/strona/functions.php on line 8

Kod funkcji:
  1. function val_prc() {
  2.  
  3. func_get_arg(0) == $val1;
  4. func_get_arg(1) == $val2;
  5.  
  6. if(isset(func_get_arg(2))) {
  7. func_get_arg(2) == $val3;
  8. }
  9. else {
  10. $val1 == $val3;
  11. }
  12. if(isset(func_get_arg(3))) {
  13. func_get_arg(3) == $val4;
  14. }
  15. else {
  16. $val2 == $val4;
  17. }
  18.  
  19.  
  20. if($val1 > 0) {
  21. return $val1." - ".$val2." (".round($val3/$val4*100, 1)."%)";
  22. }
  23. else return "<p class=\"center\">-</p>";
  24.  
  25. };
Pawel_W
ehh, poczytaj o różnicy między = a == smile.gif
darko
Na mój gust wystarczy prosty warunek wewnątrz funkcji:
  1. if(func_num_args() == 0) {
  2. // brak podanych argumentów
  3. }

albo konkretny argument np piąty:


pokaż kod po zmianach i pokaż wywołanie funkcji.
pawel.ad
@Pawel_W
Zmiana wszystkich "=" na "==" nic nie dała. Nadal ten sam błąd.

@Darko
Twój sposób też nie działa.
phpion
Cytat(pawel.ad @ 1.04.2010, 16:45:14 ) *
Zmiana wszystkich "=" na "==" nic nie dała. Nadal ten sam błąd.

Cytat(Pawel_W @ 1.04.2010, 16:35:01 ) *
ehh, poczytaj o różnicy między = a == smile.gif

= i == to zupełnie coś innego, nie można tego stosować zamiennie. Pierwsze to operator przypisania, drugi to operator porównania. Poczytaj o tym.
zend
$val1 = $val2; tak przypisujesz dane
if($val1 == $val2) echo 'ok'; tak sprawdzasz czy dane są identyczne a metoda podana przez phpion'a jest dobra

pawel.ad
OK. Dzięki za pomoc - na przyszłość będę wiedział...
  1. <?php
  2.  
  3. function val_prc() {
  4.  
  5. $val1 = func_get_arg(0);
  6. $val2 = func_get_arg(1);
  7.  
  8. if(func_get_arg(2) !== NULL) {
  9. $val3 = func_get_arg(2);
  10. }
  11. else {
  12. $val1 = $val3;
  13. };
  14.  
  15. if(func_get_arg(3) !== NULL) {
  16. $val4 = func_get_arg(3);
  17. }
  18. else {
  19. $val2 = $val4;
  20. };
  21.  
  22.  
  23. if($val1 > 0) {
  24. return $val1."&nbsp;-&nbsp;".$val2."&nbsp;(".round($val3/$val4*100, 1)."%)";
  25. }
  26. else return "<p class=\"center\">-</p>";
  27.  
  28. };
  29.  
  30. ?>

Zwraca mi błąd że argument 3 i 4 nie istnieją(jest to prawda).

  1. <?php
  2.  
  3. function val_prc() {
  4.  
  5. $val1 = func_get_arg(0);
  6. $val2 = func_get_arg(1);
  7.  
  8. if(isset(func_get_arg(2))) {
  9. $val3 = func_get_arg(2);
  10. }
  11. else {
  12. $val1 = $val3;
  13. };
  14.  
  15. if(isset(func_get_arg(3))) {
  16. $val4 = func_get_arg(3);
  17. }
  18. else {
  19. $val2 = $val4;
  20. };
  21.  
  22.  
  23. if($val1 > 0) {
  24. return $val1."&nbsp;-&nbsp;".$val2."&nbsp;(".round($val3/$val4*100, 1)."%)";
  25. }
  26. else return "<p class=\"center\">-</p>";
  27.  
  28. };
  29.  
  30. ?>

Zwraca mi błąd:
Fatal error: Can't use function return value in write context in /var/www/strona/functions.php on line 8
a linia 8 to "if(isset(func_get_arg(2))) {"
darko
Na mój gust, to isset'em nie można tego sprawdzać:

Cytat
Warning

isset() only works with variables as passing anything else will result in a parse error. For checking if constants are set use the defined() function.

i dalej
Cytat
Note: Because this is a language construct and not a function, it cannot be called using variable functions

[za:] http://php.net/manual/en/function.isset.php

Spróbuj użyć
  1. //...
  2. }
pawel.ad
Zauważyłem że się nie da isset... smile.gif
Dlatego pytam tutaj.

W każdym razie is_null też nie działa.
Wywala te same błędy co isset:
  1. Warning: func_get_arg(): Argument 2 not passed to function in /var/www/strona/functions.php on line 8
  2.  
  3. Warning: func_get_arg(): Argument 2 not passed to function in /var/www/strona/functions.php on line 9
  4.  
  5. Warning: func_get_arg(): Argument 3 not passed to function in /var/www/strona/functions.php on line 15
  6.  
  7. Warning: func_get_arg(): Argument 3 not passed to function in /var/www/strona/functions.php on line 16
darko
To wytłum skoro nie zawsze będzie podany trzeci argument
  1. if(!is_null(@func_get_arg(2))) {
  2. //...
  3. }

albo daj w blok try - catch i wyłap wyjątek. A tak na marginesie są jeszcze funkcje func_get_args oraz func_num_args
pawel.ad
Ale chodzi o to że jak nie ma podanego argumentu 3, to ma on przyjąć wartość $val1, a 4 - $val2...

I nie mam pojęcia jak to zrobić...
darko
Cytat(pawel.ad @ 1.04.2010, 21:32:03 ) *
Ale chodzi o to że jak nie ma podanego argumentu 3, to ma on przyjąć wartość $val1, a 4 - $val2...

I nie mam pojęcia jak to zrobić...

Słyszysz/czytasz siebie? Skoro czegoś nie ma, to jak to, czego nie ma, ma przyjąć jakąkolwiek wartość? Wytłum warunek sprawdzający trzeci i czwarty opcjonalny argument i będzie działać. Poza tym dla zmiennych $val3 i $val4 możesz ustawić domyślną wartość.
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.