Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wywoływanie losowej funkcji
Forum PHP.pl > Forum > Przedszkole
banialol
Mam 10 funkcji, ktore tam np nazywaja sie:

cyfra0();
cyfra1();
cyfra2();
cyfra3();
cyfra4();
cyfra5();
cyfra6();
cyfra7();
cyfra8();
cyfra9();

Zabardzo nie wiem jak zrobic zeby tylko jedną wywolać, kombinowalem na różne sposoby ale cały czas lipa.
Prosze o jakas rade.

[+] edit
Przenoszę na Przedszkole.
---
~strife
strife
  1. <?php
  2. function cyfra1() { return 1; } 
  3. function cyfra2() { return 2; } 
  4. function cyfra3() { return 3; } 
  5. function cyfra4() { return 4; } 
  6. function cyfra5() { return 5; } 
  7. function cyfra6() { return 6; } 
  8.  
  9.  
  10. $rand = rand(1, 6);
  11.  
  12. $value = call_user_func('cyfra' . $rand );
  13. echo $value;
  14. ?>


winksmiley.jpg
banialol
zrobilem tak:

  1. <?php
  2. function cyfra1() { return 1; } 
  3. function cyfra2() { return 2; } 
  4. function cyfra3() { return 3; } 
  5. function cyfra4() { return 4; } 
  6. function cyfra5() { return 5; } 
  7. function cyfra6() { return 6; } 
  8. function cyfra7() { return 7; } 
  9. function cyfra8() { return 8; } 
  10. function cyfra9() { return 9; } 
  11. function cyfra10() { return 10; } 
  12.  
  13. $rand = rand(1, 10);
  14.  
  15. $value = call_user_func('cyfra' . $rand );
  16. echo $value;
  17. ?>



i niedziala poprawnie:
wyskakuje taki błąd:

Fatal error: Cannot redeclare cyfra1() (previously declared in /ho....php:26) in /ho.....i/index.php on line 186
strife
Błąd nie dotyczy tego kawałka kodu:

Cytat
Fatal error: Cannot redeclare cyfra1() (previously declared in /ho....php:26) in /ho.....i/index.php on line 186


Sprawdź linijkę 186 w pliku index.php, a także ten plik previously declared in /ho....php:26. Czytanie błędów to podstawa. Chodzi o to , że ta funkcja została już gdzieś wczytana, taka konstrukcja powoduje błąd:

  1. <?php
  2. function dupa() {
  3.  
  4. }
  5. function dupa() {
  6.  
  7. }
  8. ?>


Pozdrawiam.
banialol
gdy daje samo:

  1. <?php
  2. $rand = rand(1, 10);
  3. $value = call_user_func('cyfra' . $rand );
  4. echo $value;
  5. ?>


niby sie wczytuje kod HTML zawarty w funkcji, ale juz dzialania na tym kodzie takie:

  1. <?php
  2. function cyfra9(){
  3. if (isset($_POST["cyfry"])){
  4. echo ('
  5. <form action="index.php" method="POST">0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;&nbsp;6&nbsp;7&nbsp;8<input type="text" size=3 name="ile9"/><br>
  6. <br>
  7. <input type="submit" value="ok" name="ok9"/>
  8. </form>');}
  9. $ile9 = $_POST["ile9"];
  10. if (isset($_POST["ok9"])){
  11. if (empty($ile9))
  12. echo "Nic nie wpisales.";
  13. else{
  14. if ($ile9=="9")
  15. echo "BRAWO!!!";
  16. else {echo "Naucz sie liczyc";}}}}
  17. ?>


niedzialaja.
P.S. zaczynam robic stronke dla dzieci o matematyce
strife
Wydaje mi się, że tutaj trzeba użyć innego rozwiązania, a mianowicie jeśli masz kilkanaście prawie identycznych funkcji to czy nie lepiej, stworzyć jedną funkcję, a następnie podawać argumenty dla niej, wygląda to w ten sposób:

  1. <?php
  2. function dupa( $foo, $boo ) {
  3. echo 'SUMA: Wybrales' . $foo . ' a takze: ' . $boo . ' co daje = ' . ( $foo + $boo );
  4. }
  5. $liczba1 = 4;
  6. $liczba2 = 10;
  7. dupa( $foo, $boo );
  8. ?>


Opisz bardziej swój problem, co dokładnie chcesz osiągnąć ponieważ uważam, ze użycie call_user_func" title="Zobacz w manualu PHP" target="_manual nie będzie w Twoim wypadku trafione.

PS. Życzę powodzenia : )
banialol
Strife to nie ma dzialac na zasadzie dodawania tylko tak:
http://www.orzech99.webd.pl/bania/dzieci/index.php
strife
Cytat(banialol @ 8.05.2007, 00:58:54 ) *
Strife to nie ma dzialac na zasadzie dodawania tylko tak:
http://www.orzech99.webd.pl/bania/dzieci/index.php


Rozumiem, ale ja Ci podałem tylko przykład, że nie musisz pisać kilkunastu prawie identycznych funkcji tylko możesz przekazywać pewne parametry poprzez argumenty funkcji. Napisz jak chcesz, aby ten skrypt działał, narazie domyślam się, że chcesz aby dzieciak miał powiedzmy 10 zadań do wpisania liczb, jedno pod drugim w miarę uzupełniania tak ?

Jeśli mam rację to nadal uważam, że można to stworzyć dużo prościej, przy użyciu jednej funkcji nie 10-ciu ( czyli tyle ile zakładasz, że będzie zadań ). Najprościej mi to będzie zilustrować przykładem:

Po co pisać:
  1. <?php
  2. function cyfra1() { echo 1; }
  3. function cyfra2() { echo 2; }
  4. // .. etc.
  5. // jak można:
  6. function cyfra($var) { echo $var } 
  7. // cyfra(2); cyfra(2123)
  8. ?>


Jeśli Cię źle zrozumiałem to przepraszam, napisz może trochę jaśniej co chcesz osiągnąć to Ci lepiej pomogę.

Pozdrawiam.
banialol
OK

Mam juz te 10 funkcji (sral pies jak napisane, wazne narazie ze dziala) i potrzebuje 1 funkcje z tych 10 losowo wyswietlic.

gdy stosuje:
  1. <?php
  2. $rand = rand(1, 10);
  3. $value = call_user_func('cyfra' . $rand );
  4. echo $value;
  5. ?>


niby sie wyswietla 1 losowo funkcja ale tak jakby kod PHP w niej nie dziala,
gdy ustawiam recznie bez tego losujacego skryptu np echo cyfra3(); to dziala wszystko idealnie az milo.
Grzyw
Strife ma rację. Banialol, podałeś tutaj przykładowy kod funkcji czy faktycznie one mają za zadanie zwracać kolejne liczby? Jeżeli tak to dokładnie wygląda w Twoim skrypcie, to faktycznie skrypt:
  1. <?php
  2. function cyfra($var) { echo $var }
  3. cyfra(rand(0,9));
  4. ?>
rozwiązuje problem...
tomaszq
  1. <?php
  2. $losowa = rand(1,6);
  3.  
  4. switch($losowa)
  5. {
  6. case 1: funkcja1();break;
  7. case 2: funkcja2();break;
  8. case 3: funkcja3();break;
  9. case 4: funkcja4();break;
  10. // .....
  11. };
  12. ?>
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.