Autor | Zpráva | ||
---|---|---|---|
dizi Profil * |
#1 · Zasláno: 31. 1. 2008, 10:07:39
Dobrý deň, mám taký celkom veľký problémik z php..
Object of class Visitors could not be converted to string Čo tento problém znamená viem.. a viem aj to že to je spôsobené verziou php. Ale ako to vyriešiť? Áno vygooglil som niečo ale boli to nepoužiteľné spôsoby. Funckia v ktorej to hlási je súčasťou šablonovacieho systému, a je to konkrétne ten zvýraznený riadok function parse($target, $block = "", $append = false) { if($block == "") { $block = $target; } if(isset($this->blocks["/\{$block}/"])) { if($append) { $this->vars["/\{$target}/"] .= preg_replace(array_keys($this->vars), array_values($this->vars), $this->blocks["/\{$block}/"]); } else { $this->vars["/\{$target}/"] = preg_replace(array_keys($this->vars), array_values($this->vars), $this->blocks["/\{$block}/"]); } switch($this->unknowns) { case "keep": break; case "comment": $this->vars["/\{$target}/"] = preg_replace('/{(.+)}/', "<!-- UNDEF: \\1 -->", $this->vars["/\{$target}/"]); break; case "remove": default: $this->vars["/\{$target}/"] = preg_replace('/{\w+}/', "", $this->vars["/\{$target}/"]); break; } } else { $this->halt("parse: neexistujuci blok \"$block\"."); } return $this->vars["/\{$target}/"]; } Neviete o nejakom jednoduchom spôsobe ako to vyriešiť? Mňa napáda jedine vytvoriť novú metódu, ktorá tie polia rozbije a každú jednu položku prevedie na string a spraví z toho späť pole.. ale nezdá sa mi to efektívne |
||
Mastodont Profil |
#2 · Zasláno: 31. 1. 2008, 10:39:22
Napsat metodu __toString jsi zkoušel?
|
||
dizi Profil * |
#3 · Zasláno: 31. 1. 2008, 12:15:47
áno túto metódu som skúšal, pravdepodobne som prepracovaný, ale nejak neviem prísť nato čo ma vrátiť
|
||
dizi Profil * |
#4 · Zasláno: 31. 1. 2008, 14:06:01
spravil som si samostatny class pre metodu to string
class magicmethod { public $co; //pixlovina public function __construct($co) { $this->co = "/\{$co}/"; } public function __toString() { return $this->co; } } a kod vo funkcii parse som trochu upravil $blok = new Magicmethod($block); $ciel = new Magicmethod($target); echo $blok."<br>"; //toto pekne bezi echo $ciel."<br>"; //toto pekne bezi $this->vars[$ciel]= preg_replace(array_keys($this->vars), array_values($this->vars), $this->blocks[$blok]); stale hlasi to z convertovanim objectu + pribudla nova hlaska: [kod] Warning: Illegal offset type in /data/www/xxx/rsx2/classes/class.template.php on line 73 [/kod] ta 73 je stale ten isty riadok.. |
||
BetaCam Profil |
#5 · Zasláno: 31. 1. 2008, 23:54:30
dizi
$blok = new Magicmethod($block); $ciel = new Magicmethod($target); echo $blok."<br>"; //toto pekne bezi echo $ciel."<br>"; //toto pekne bezi $this->vars[$ciel]= preg_replace(array_keys($this->vars), array_values($this->vars), $this->blocks[$blok]); co je v $block?? co je v $target?? co je v $this->vars?? co je v $this->blocks?? Možná by nebylo od věci napsat sem celou třídu. Pokud ti to bude proti srsti hodilo by se alespon říct co které proměnné obsahují. Pokud bych se měl spolehnout jen na svou křištálovou kouli tak bych podle hlášky "Object of class Visitors could not be converted to string" řekl, že $this->vars je pole se string hodnotama $this->blocks je pole objektů tedy +-, že $this->blocks['Visitors'] = new Visitors(); $this->blocks['Stats'] = new Stats(); preg_replace(array_keys($this->vars), array_values($this->vars), $this->blocks[$blok]); pomocí $this->blocks[$blok] se tedy snažíš použít objekt jako string což hází chybu. Pokud je to takto měly by třídy "Visitors", "Stats", a dalsí, kteté takto budeš využívat mít definovanou metodu __toString(), která se postará o "převedení objektu na string" pokud to tak není tak zdřejmě má věštící koule zklamala a ty by si měl zkusit dodat nějaké další informace o problému. |
||
dizi Profil * |
#6 · Zasláno: 1. 2. 2008, 08:49:04
na úvod predovšetkým ďakujem za reakciu.. v princípe ti "křištálova koule" funguje.. :)
Ak som správne pochopil každá z tried, ktoré tomto skripte používam musí mať metódu __toString? Dúfal som že bude stačiť vloženie do tejto aktuálnej triedy |
||
BetaCam Profil |
#7 · Zasláno: 1. 2. 2008, 09:24:04
dizi
Ak som správne pochopil každá z tried, ktoré tomto skripte používam musí mať metódu __toString? V tomhle případě ji budou zdřejmě muset mít všechny třídy, které ukládáš do $this->blocks. Jak jí tam dostaneš to je na tobě jesli jí v každé třídě nadefinuješ nebo jí třeba zdědíš. Další možnost je úprava šablonovacího systému. Nelze tady řešit konkrétní postupy jak bys to měl řešit na to by byla potřeba znát šablonovou třídu a třídy bloků. |
||
dizi Profil * |
#8 · Zasláno: 1. 2. 2008, 10:42:39
úprava šablonovacieho systému pravdepodobne neprichádza moc do úvahy, pohrám sa z tou metódou..
ešte raz Ďakujem |
||
Časová prodleva: 4 dny
|
|||
dizi Profil * |
#9 · Zasláno: 5. 2. 2008, 14:02:27
v mojich classoch som tento problém vyriešil, ale ako to vyriešiť v prípadte stdClass?
Object of class stdClass could not be converted to string in.. |
||
Časová prodleva: 16 let
|
0