Stratena metoda objektu v poli volaneho premennou – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Stratena metoda objektu v poli volaneho premennou – PHP – Fórum – Programujte.comStratena metoda objektu v poli volaneho premennou – PHP – Fórum – Programujte.com

 

Smokie0
Expert
25. 7. 2008   #1
-
0
-

Zdravim,

mam pole objektov pomenovane napr. $object a v nom napr. metodu get_name().
Ak zavolam

$object[1]->get_name()
, tak je vsetko v poriadku a metoda vykona co ma. Problem nastava vtedy, pokial chcem prvok pola, teda nejaky objekt v nom ulozeny zavolat pomocou premennej, napr.
$object[$id]->get_name()
, tak mi okamzite vypise

Fatal error: Call to a member function get_name() on a non-object


Premenna $id ma priradenu korektnu hodnotu, teda nie je ani mimo pola, ani nic podobne

Pritom konstruktor s tym nema vobec ziadne problemy. Trieda, konstruktor, aj metody su napisane spravne, pretoze to funguje, pokial ako index zadam konkretnu hodnotu, ale ak namiesto nej dam premennu, tak sa to zruti.

Nahlásit jako SPAM
IP: 88.212.23.–
hrach
~ Redaktor
+1
Boss
25. 7. 2008   #2
-
0
-

zkus se podívat, co tam je:

print_r($object[$id]);

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
Smokie0
Expert
25. 7. 2008   #3
-
0
-

Vypisalo obsah objektu v prvku pola s indexom $id...
Konkretne

Menu_Categories Object ( [id_category] => 2 [name] => Kontakt [position] => 2 ) 1


Nechapem tu jednotku na konci. $id sa rovnalo hodnote 2.
V tom objekte su ulozene tri hodnoty, id_category, name a position. Vsetko vypisalo spravne.

Nahlásit jako SPAM
IP: 88.212.23.–
Smokie0
Expert
25. 7. 2008   #4
-
0
-

A ked som pouzil

 print_r($objMenu_cat[$j]->get_name());
tak dokonca vypisalo
Kontakt
co je spravna hodnota, ktoru ma tato medota vypisat...

Nahlásit jako SPAM
IP: 88.212.23.–
Smokie0
Expert
25. 7. 2008   #5
-
0
-

Funguje to aj s echo a print, ale ked to chcem priradit ako hodnotu premennej, tak ani za svet...

Nahlásit jako SPAM
IP: 88.212.23.–
hrach
~ Redaktor
+1
Boss
25. 7. 2008   #6
-
0
-

To Smokie : no a jakym zpusobem prirazujes hodnotu?

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
Smokie0
Expert
25. 7. 2008   #7
-
0
-

Ale objavil sa dalsi problem, vlastne sa nic nevyriesilo.

echo $objMenu_cat[$j]->get_name();
ide bez problemov, ale
echo $objMenu_cat[$p->get_menucat()]->get_name();

$p je "alias" objektu vo foreach, ak to mozem tak nazvat.

A ten isty problem je aj ked $p->get_menucat() priradim nejakej premennej. Tak sme sa vlastne dostali na zaciatok problemu.

hrach napsal:
To Smokie : no a jakym zpusobem prirazujes hodnotu?

Takto
$nof_menu_category = $objMenu_cat[$j]->get_name();

a
echo $objMenu_cat[$nof_menu_category]->get_name();
hadze tu chybu na zaciatku

Nahlásit jako SPAM
IP: 88.212.23.–
hrach
~ Redaktor
+1
Boss
25. 7. 2008   #8
-
0
-

dej sem pokud mozno vice kodu a napis presned tu chybu

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
Smokie0
Expert
25. 7. 2008   #9
-
0
-

Ok, tusil som, ze to zacne byt uz trosku chaoticke...

Mam jedno pole objektov $objPages[]. Tieto objekty su triedy Pages, ktora okrem ineho ma v clenskej premmenej menu_category cisla. Tieto cisla su ID cisla kategorii.

class Pages {

...
var $menu_category;
...

function Pages($a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l) {
...
$this->menu_category = $e;
...
}

function get_menucat() {
return $this->menu_category;
}
}


Ich nazvy su ulozene v objektoch triedy Menu_Category, ktore su ulozene v poli $objMenu_cat[]
class Menu_Categories {

var $id_category;
var $name;
var $position;

function Menu_Categories($id_category, $name, $position) {
$this->id_category = $id_category;
$this->name = $name;
$this->position = $position;
}

function get_name() {
return $this->name;
}
}


V inom skripte chcem vypisat obsah objektov triedy Pages a spolu s nimi aj nazvy kategorii kam patria. Tie nazvy su ulozene v objektoch triedy Menu_Category.

Na vypis pouzivam
foreach($objPages as $p) {

echo $objMenu_cat[$p->get_menucat()]->get_name();
}

ale toto vrati iba chybu na riadku kde je echo:

Fatal error: Call to a member function get_name() on a non-object...



Ale ked to zmenim na
echo $objMenu_cat[1]->get_name();
, tak to prebehne v poriadku

--------------------------------------

A uz aj viem preco... Tie objekty su naplnane udajmi z databazy a kazdy riadok v nej ma svoje ID a to zacina od 1. A pole zacina od 0. A ja som namiesto iterovania nejakeho $j zacinajuceho od 0 pri vytvarani objektov daval ako indexy prave tie ID. Preto ked foreach zacal hladat objekt s indexom 0, tak ho nenasiel a skript zastavil...

Toto uz pisem iba pre niekoho, kto by mal podobny problem a nevedel si pomoct.

hrach, dakujem za pomoc :)

Nahlásit jako SPAM
IP: 88.212.23.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 76 hostů

Podobná vlákna

Metoda na prevod poli — založil Michal Konecny

Inicializace více polí objektů? — založil KingScorpion

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý