Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Losowanie koloru tła
Forum PHP.pl > Forum > Przedszkole
Teppic
Witam ponownie. Otóż stworzylem kod generujący losowy kolor tła strony:

  1.  
  2. <html>
  3.  
  4. <?php
  5.  
  6.  
  7.  
  8. class Losowanie{
  9.  
  10. //losuje liczbe
  11. function losuj(){
  12. return rand(0,9);
  13. }
  14.  
  15.  
  16. //powtarza losowanie i ustala kolor tla!
  17. function kilka(){
  18.  
  19. for($i=1; $i<=6; $i++){
  20. echo $this->losuj();
  21. }
  22. }
  23.  
  24.  
  25. function Jaki(){
  26. $this->kilka();
  27. }
  28.  
  29.  
  30. function wyswietl(){
  31. echo '<body bgcolor="#';
  32. $this->Jaki();
  33. echo '">';
  34.  
  35. }
  36.  
  37.  
  38.  
  39. }
  40.  
  41. $los=new Losowanie();
  42.  
  43.  
  44.  
  45.  
  46. $los->wyswietl();
  47.  
  48. echo 'Kolor tla to #';
  49. $los->Jaki();
  50.  
  51.  
  52.  
  53.  
  54.  
  55. ?>
  56.  
  57.  
  58. </body></html>
  59.  


W czym problem? Otóż fraza "Kolor tła to #" owszem mówi jaki kolor jest ale podaje nieprawdziwą wartość kodową koloru. Domyslam się, że po prostu funkcja "Jaki()" jest wywolana drugi raz i przyjmuje inne parametry. Jak zrobić by pokazywala wlasciwą wartos kodową koloru, tzn. by wywolana drugi raz funkcja "Jaki()" korzystala z tych samych wylosowanych numerów funkcji "losuj()">

Przepraszam, pewnie problem jest banalny ale nie daje mi spokoju;P
Rysh
Ta klasa jest masakryczna. Po co tworzysz funkcję Jaki, skoro ona uruchamia tylko inną funkcję?
Teppic
Cytat(Rysh @ 21.03.2012, 21:52:35 ) *
Ta klasa jest masakryczna. Po co tworzysz funkcję Jaki, skoro ona uruchamia tylko inną funkcję?


Tą funkcje dodalem niedawno. I wiem, że jest niepotrzebna, po prostu napisalem ją by przyklad był bardziej "czytelny":P. No i myslalem ze dzieki temu kolor bedzie podawany prawidlowo;P. Mylilem sie.
Rysh
  1. <?php
  2.  
  3. class Losowanie {
  4. public $kolor;
  5. function __construct() {
  6. for($i = 0 ; $i < 6 ; $i++) {
  7. $this->kolor .= rand(0,9);
  8. }
  9. }
  10. }
  11.  
  12. $kolor = new Losowanie;
  13. echo "Wylosowany kolor to: ". $kolor->kolor;


Dla jeszcze lepszej poprawności dałbym w tablicy $kolory liczby od 1 do 16 (w formie szesnastkowej oczywiście) czyli 0 do F i z nich losował kolor.
Teppic
No no nie wiedzialem że można tak wiele uproscic;). Jakoś nie bardzo lubię się z funkcją "construct"(czytaj nie rozumiem jej za bardzo) i dlatego wolę uzywać zwyklych funkcji. Oczywiscie chciałem dać tez literki w kodach kolorów ale myslalem ze wykorzystują caly alfabet i dlatego odpadł pomysł tablicy;). Widac sie mylilem.

A nie mozna jakos do mojego kodu dodac kilka linijek? zy musi to byc ta nieszczesna "construct"?tongue.gif
Rysh
Pewnie że możesz, ale nie widzę najmniejszego sensu. Poczytaj o __construct przyda Ci się.
__construct jest zawsze wykonywana przy tworzeniu obiektu. Nic nadzwyczajnego wink.gif

Wydaje mi się, że można jeszcze bardziej uprościć ten kod i dać coś w stylu rand(000000, FFFFFF); zamiast pętli for.
Teppic
Cytat(Rysh @ 21.03.2012, 22:21:45 ) *
Pewnie że możesz, ale nie widzę najmniejszego sensu. Poczytaj o __construct przyda Ci się.
__construct jest zawsze wykonywana przy tworzeniu obiektu. Nic nadzwyczajnego wink.gif

Wydaje mi się, że można jeszcze bardziej uprościć ten kod i dać coś w stylu rand(000000, FFFFFF); zamiast pętli for.


Jesli w funkcji "rand" istnieje przedzial kolorów to rzeczywiscie bardzo to ulatwi napisanie kodu;P. Poczytam, może jest cos takiego. Niemniej ja ten kod napisalem bardziej po to by się sprawdzić czy potrafię;P. Normalnie to mam z góry ustalony kolor tła;). No i zaintrygowało mnie to ".=" w kodzie konstuktora. Domyslam się, że to służy do dodawania kolejnej wylosowanej cyfry do zmiennej "kolor". Nie spotkalem sie z tym jeszcze.
Rysh
Trochę nie rozumiem po co Ci przedział kolorów. Funkcja rand służy do generowania liczb z podanego zakresu. Jeśli podamy zakres w postaci szesnastkowej to powinniśmy otrzymać liczbę z tego przedziału, czyli jak to Ty napisałeś "z przedziału kolorów".

Tak .= służy do dodawaniu ciągu znaków do zmiennej.

No widzisz chwila z manualem i zrobiłem jeszcze prostrzą wersję:
  1. <?php
  2.  
  3. class Losowanie {
  4. public $kolor;
  5. function __construct() {
  6. $this->kolor = dechex(rand(0x000000,0xFFFFFF));
  7. }
  8. }
  9.  
  10. $kolor = new Losowanie;
  11. echo "Wylosowany kolor to: ". $kolor->kolor;
  12. ?>
Teppic
Dzięki wielkie! Czlowiek całe życie się uczy;). Też cały czas przeglądam manual bo się próbuję pouczyc PHP. Teraz popróbuję coś trudniejszego napisać, jakby co to zajrzę tu na forum z pytaniem;).

Czeka mnie teraz nauka polaczenia z bazą danych i formularze logowania... moja zmora od której się odbijam;P

Dzięki za pomoc.
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.