Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] dostaję warning, dlaczego?
john_doe
post
Post #1





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


witajcie,

plik prostej klasy

  1. <?php
  2.    
  3. class totoLotto
  4. {
  5.    public $wylosowana = array();
  6.    var $tmp;
  7.    
  8.    public function setTmp()
  9.    {
  10.        $this -> tmp = $tmp;
  11.    }
  12.  
  13.    public function setWylosowane()
  14.    {
  15.        $this -> wylosowana = $wylosowana;
  16.    }
  17.    
  18.    public function losujLiczby()
  19.    {        
  20.        $i = 0;
  21.        while( $i <= 5 )
  22.        {
  23.            $this -> tmp = rand(1,10);
  24.            if( !in_array( $this -> tmp, $this -> wylosowana ) )
  25.            {
  26.                $this -> wylosowana[$i] = $this -> tmp;
  27.                $i++;
  28.            }
  29.        }
  30.    }
  31.    
  32.    public function wypiszWylosowaneLiczby()
  33.    {
  34.        for($i = 0 ; $i <= 5 ; $i++)
  35.        {
  36.            print $i . ' - ' . $this -> wylosowana[$i] . '<br />';
  37.        }    
  38.    }
  39.    
  40. }
  41.  
  42. ?>


oraz index

  1. <?php
  2. include('_class.php');
  3.  
  4. $kcLotto = new totoLotto;
  5.  
  6. $kcLotto -> setWylosowane();
  7. $kcLotto -> losujLiczby();
  8. $kcLotto -> wypiszWylosowaneLiczby();
  9.  
  10.  
  11.  
  12. ?>

Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:wampwwwoopkcLotto_class.php on line 24

proszę ogólnie o opinie na temat tego kodu. Jestem samoukiem. Chciałbym dobrze zacząć.
Ogólnie to coś działa ale najpierw wywala mi warninga (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

pozdrawiam

Ten post edytował john_doe 6.01.2009, 21:51:36
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Przeczytaj najpierw co zwraca funkcja rand() a czego w argumentach oczekuje in_array().

Przenoszę na Przedszkole.
Go to the top of the page
+Quote Post
john_doe
post
Post #3





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


taki testowy kod działa
  1. <?php
  2.  
  3. $tab = array(1,2,3);
  4.  
  5. $losowa = rand(1,3);
  6.  
  7. if(in_array($losowa, $tab))
  8.    echo 'znalazlem ' . $losowa;
  9. else echo 'nie znalazlem';
  10.  
  11. ?>


in_array zwraca wartość "boolową"
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


in_array() zakłada, że przekażesz element tablicy i tablcię. I w teście faktycznie tak robisz.
A w poprzednim przykładzie? Sprawdzasz istnienie elementu $this->tmp w tablicy $this->wylosowana. Tylko czy na pewno to jest tablica? Nie.
Go to the top of the page
+Quote Post
john_doe
post
Post #5





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


Mike zobacz na początku klasy mam
public $wylosowana = array();
co tu jest nie tak?
Go to the top of the page
+Quote Post
mike
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A co masz później? W wywołaniu.
$kcLotto->setWylosowane();

Poza tym metody totoLotto::setTmp() i totoLotto::setWylosowane() są pozbawione sensu.
Obie wywalą komunikat Notice: Undefined variable. W pierwszym przypadku korzystasz ze zmiennej $tmp, której nie ma a w drugim jest to $wylosowana. Zmienne te powinny przyjść do metod jako argumenty.
Go to the top of the page
+Quote Post
john_doe
post
Post #7





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


dziekuje Mike. racja. Pływam w OOP ale podoba mi sie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)


w sumie na końcu dodałem to wywołanie. Chyba tego do końca nie rozumiem. ubzdurałem sobie, że każdą zmienna zwykła czy tablicową muszę zainisjować poprzez właśnie taką funkcję "set".

czyli moge robić tak: (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
np.
public $zmienna;

a potem odwoływać się do niej $this -> zmienna;

myślałem że funkcja set pozwoli mi dopiero na takie odwoływanie się bez $ (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
może to głupie ale ucze się OOP.

jeszcze raz dzięki



pozdrawiam.
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(john_doe @ 6.01.2009, 22:08:42 ) *
może to głupie ale ucze się OOP.
Uczenie się to zachowanie dalekie od głupiego. Nikt nie rodzi się z umiejętnością programowania obiektowego.
Zresztą każdy uczy się całe życie. Ja dla przykładu siedzę teraz i też się uczę i pewnie popełniam błedy porównywalne do Twoich.

Przenoszę z powrotem na OOP. Bo jednak faktycznie tu masz problemy.
Go to the top of the page
+Quote Post
john_doe
post
Post #9





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


Mike a czy byłby sens gdybym zmienne tmp i wylosowana powołał do życia w konstruktorze?
function __construct()
{
$this -> zmienna = $zmienna;
$this -> wylosowana = $wylosowana;
}
czy w ogóle nie ma takiej potrzeby...

Możesz mi tylko jeszcze zobrazować o co chodzi z tymi ::
(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?

Ten post edytował john_doe 6.01.2009, 22:22:21
Go to the top of the page
+Quote Post
wrzasq
post
Post #10





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

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


Potrzeby sam sobie określasz. Ale to, co ty ciągle robisz, już ci wytknął mike. Taka metoda jaką ty przed chwilą napisałeś jest bez sensu (może się przyzwyczailes do globali?). Ty tych zmiennych po prostu nie masz, więc co chcesz przypisać?

  1. <?php
  2. public function __construct($zmienna, $wylosowana)
  3. {
  4.    $this->zmienna = $zmienna;
  5.    $this->wylosowana = $wylosowana;
  6. }
  7. ?>


Tak jeśli już musisz (aczkolwiek w tym wypadku używanie setTmp() i setWylosowane() będzie chyba odpowiedniejsze niż robienie wszystkiego w konstruktorze.

O :: sobie poczytaj w manualu, nosz proszę, podstaw to jednak sam powinieneś chociaż próbować poszukać.
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: 24.08.2025 - 07:43