Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Jak sprawdzić czy argument funkcji jest podany?
pawel.ad
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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. };


Ten post edytował pawel.ad 1.04.2010, 15:33:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Pawel_W
post
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


ehh, poczytaj o różnicy między = a == (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
darko
post
Post #3





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.

Ten post edytował darko 1.04.2010, 15:48:11
Go to the top of the page
+Quote Post
pawel.ad
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


@Pawel_W
Zmiana wszystkich "=" na "==" nic nie dała. Nadal ten sam błąd.

@Darko
Twój sposób też nie działa.

Ten post edytował pawel.ad 1.04.2010, 15:46:30
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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 == (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
zend
post
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


$val1 = $val2; tak przypisujesz dane
if($val1 == $val2) echo 'ok'; tak sprawdzasz czy dane są identyczne a metoda podana przez phpion'a jest dobra

Go to the top of the page
+Quote Post
pawel.ad
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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))) {"
Go to the top of the page
+Quote Post
darko
post
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował darko 1.04.2010, 19:52:23
Go to the top of the page
+Quote Post
pawel.ad
post
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Zauważyłem że się nie da isset... (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
darko
post
Post #10





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował darko 1.04.2010, 20:03:03
Go to the top of the page
+Quote Post
pawel.ad
post
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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ć...
Go to the top of the page
+Quote Post
darko
post
Post #12





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ść.

Ten post edytował darko 1.04.2010, 20:39:19
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 02:10