Autor | Zpráva | ||
---|---|---|---|
kuba123 Profil * |
#1 · Zasláno: 15. 6. 2013, 12:09:23 · Upravil/a: kuba123
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 |
#2 · Zasláno: 15. 6. 2013, 13:05:18
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 |
#3 · Zasláno: 15. 6. 2013, 13:15:58
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 * |
#4 · Zasláno: 15. 6. 2013, 13:21:19
Dík.
|
||
kuba123 Profil * |
#5 · Zasláno: 15. 6. 2013, 14:57:25 · Upravil/a: kuba123
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 .
|
||
Časová prodleva: 11 let
|
0