Autor Zpráva
kuba123
Profil *
Trying to get property of non-object

<?php

class Search{
   public $colors, $genders, $gencount, $usc;
   function reset(){
     $this->colors=array();
     $this->genders=array();
     $this->gencount=array();
     $this->usc=0;
   }
}

class Results{
   public $search;
   public $search;
   __Constructor {
   $this->search = New Search();
   }
}

$results = New Results();

?>

V momentě kdy se zkouším vyresetovat hodnoty v objektu tak dostávám tuto chybovou hlášku. Taky to zkouším takto, ale ani jedna varianta nefunguje. Co s tím?

<?php

class Search{
   public $colors, $genders, $gencount, $usc;
   function reset(){
     global $results;
     $results->search->colors=array();
     $results->search->genders=array();
     $results->search->gencount=array();
     $results->search->usc=0;
   }
}

class Results{
   public $search;
   public $search;
   __Constructor {
   $this->search = New Search();
   }
}

$results = New Results();

?>



Ještě podotýkám, že do toho objektu $results->search mohu normálně přistupovat či nastavovat hodnoty, ale ta metoda na reset mi nejede
Alphard
Profil
kuba123:
__Constructor
:-) viz php.net/manual/en/language.oop5.decon.php

Neukazujete přesný kód, ale předpokládám, že je problém v tom, že instance třídy Search prostě neexistuje.
juriad
Profil
Druhou variantu zahoď, zanáší neviditelnou závislost pomocí global.

Metoda, která se zavolá, když se vytváří instance objektu se v PHP jmenuje __construct.
Každý atribut můžeš deklarovat ve třídě jen jednou, viz řádku 14 a 15.

K chybě dochází kvůli tomu, že __Constructor se nikdy nezavolá (nevolá se automaticky, na to blbě jmenuje, a nevoláš ho ani ty sám), tedy $search má výchozí prázdnou hodnotu.
kuba123
Profil *
Dík.
kuba123
Profil *
Stále mi to nejede a stále stejná chyba:

<?php

class Search{
   public $colors, $genders, $gencount, $users;
}

class Results{
   public $search;
   __construct() {
   $this->search = New Search();
   $this->reset();
   }
   public function SQL($query,$UseCache=false){
    $tmp = New CacheQuery($query,$UseCache);
    return $tmp->data;
   }
   public function reset(){
     $this->search->colors=array();
     $this->search->genders=array();
     $this->search->gencount=array();
     $this->search->users=0;
   }
}

$results = New Results();

?>

Call to a member function reset() on a non-object


Je to vcelku jedno jestli to resetuju před voláním SQL nebo až pak, v obou případech to hlásí chybu že ta instance neexistuje

  $results->reset();
    $data = $results->SQL("SELECT gender, count(*) as c FROM ".C_MYSQL_MEMBERS_MAIN." WHERE status > '6' group by gender order by c desc",IsCache(1,64));
  print_r($data);



Tak jsem to vyřešil. Zjistil jsem, že ten soubor se třídou se vůbec nenačetl a to vážně nechápu, protože jsem ho před tím už používal...
juriad
Profil
A ještě, __construct je také funkce, musí mít uvedené function.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0