Autor | Zpráva | ||
---|---|---|---|
snazimse Profil |
Zdravím,
mám problém,seděl jsem nad tím celý den,ale prostě nevím co s tím.Upravuju nějaké věci v OOP. Jde o funkci getIDs. Pak mám funkci dispHeader. A jakmile tam vložím $IDs = $this->getIDs() ,nebo druhé místo $IDs; Tak se to hned vypíše,i zároveň pak v $header. Jenže se vypíše celá funkce getIDS,např i proměnná $example. Ale já bych potřeboval aby se vypsal ve dispHeader jen return z té funkce getIDS tedy jen výsledek funkce,ne celý obsah ve funkci dispHeader,která se pak celá přečte přímo na webu.Nic jiného,jak na to prosím? Obě funkce jsou ve stejné třídě samozřejmě, Děkuji velmi za všechny reakce! function getIDs($myposts) { $example = "nothing"; foreach( $myposts as $post ) : if (get_the_title() == strtolower($user_login)) { return "yes"; } else { return "no"; } endforeach; } function dispHeader() { global $user_ID, $user_login; $numNew = $this->getNewMsgs(); $numAnn = $this->getAnnouncementsNum(); $msgBoxSize = $this->getUserNumMsgs(); $adminOps = $this->getAdminOps(); $IDs = $this->getIDs(); $user_info = get_userdata($user_ID); if ($adminOps['num_messages'] == 0 || current_user_can('manage_options')) $msgBoxTotal = __("Unlimited", "fep"); else $msgBoxTotal = $adminOps['num_messages']; $header = "<div id='fep-wrapper'>"; $header .= "<div id='fep-header'>"; $header .= $IDs."<p><strong>".__("Welcome", "fep").": ".$this->convertToDisplay($user_login)."</strong><br/>"; $header .= __("You have", "fep")." (<font color='red'>".$numNew."</font>) ".__("new messages ", "fep"); //" ".__("and", "fep")." (<font color='red'>".$numAnn."</font>) ".__("announcement(s)", "fep")."<br/>"; if ($msgBoxTotal == __("Unlimited", "fep") || $msgBoxSize < $msgBoxTotal) $header .= __("<br>Message box size", "fep").": ".$msgBoxSize." ".__("of", "fep")." ".$msgBoxTotal."</p>"; else $header .= "<font color='red'>".__("Your Message Box Is Full! Please delete some messages.", "fep")."</font></p>"; $header .= "</div>"; return $header; } |
||
Joker Profil |
#2 · Zasláno: 24. 9. 2014, 21:19:53
snazimse:
Chápu to správně, že se vypíše kód funkce, místo aby se vykonal? Jestli ano, bude problém někde jinde, ta konstrukce jak se to volá je správně. |
||
snazimse Profil |
Ano mělo by to být jak říkáte,chápete zřejmě správně.Tak co s tím ,hledat chybu jinde asi jedine?
Zkoušel jsem nějaký jednoduchý zkoušející kod.Chci se zeptat s oop jsem ještě moc nepracoval. Když dám bez podmínky třeba jen příklad.Tak mi tato funkce vrátí pouze 1.Ale s echo,vrátí to co se očekává,tedy projde pole a podle toho vrátí. Je to v pořádku? Děkuji velmi! function trying () { $arr1 = array("a","b","c"); $arr2 = array("1","2","3"); foreach ( $arr2 as $arrs2 ) { if ($arrs2=="2") { return $arrs2; } else { return $arrs2; } } } Já jsem totiž zatím moc return nepoužíval. Viz celý funkční zkušební kod: function trying () { $arr1 = array("a","b","c"); $arr2 = array("1","2","3"); foreach ( $arr2 as $arrs2 ) { if ($arrs2=="3") { return $arrs2; } } } function doing() { $next = $this->trying(); return $next; } function dispHeader() { global $user_ID, $user_login; $numNew = $this->getNewMsgs(); $numAnn = $this->getAnnouncementsNum(); $msgBoxSize = $this->getUserNumMsgs(); $adminOps = $this->getAdminOps(); $IDs = $this->doing(); $user_info = get_userdata($user_ID); if ($adminOps['num_messages'] == 0 || current_user_can('manage_options')) $msgBoxTotal = __("Unlimited", "fep"); else $msgBoxTotal = $adminOps['num_messages']; //$getids5 = $this->getIDs(); $header = "<div id='fep-wrapper'>"; $header .= "<div id='fep-header'>"; $header .= $IDs."<p><strong>".__("Welcome", "fep").": ".$this->convertToDisplay($user_login)."</strong><br/>"; $header .= __("You have", "fep")." (<font color='red'>".$numNew."</font>) ".__("new messages ", "fep"); //" ".__("and", "fep")." (<font color='red'>".$numAnn."</font>) ".__("announcement(s)", "fep")."<br/>"; if ($msgBoxTotal == __("Unlimited", "fep") || $msgBoxSize < $msgBoxTotal) $header .= __("<br>Message box size", "fep").": ".$msgBoxSize." ".__("of", "fep")." ".$msgBoxTotal."</p>"; else $header .= "<font color='red'>".__("Your Message Box Is Full! Please delete some messages.", "fep")."</font></p>"; $header .= "</div>"; return $header; } |
||
rafej Profil |
#4 · Zasláno: 24. 9. 2014, 23:28:45
Joker:
„Jestli ano, bude problém někde jinde, ta konstrukce jak se to volá je správně.“ Pokud dobře vidím, tak se nevolá správně. Tazatel si funkci definoval s parametrem, ale při volání jí žádný parametr nepředává. Funkce nemá s čím pracovat a protože při definici na takovou situaci nebylo pamatováno, tak ani nic nevrací. |
||
Joker Profil |
#5 · Zasláno: 25. 9. 2014, 07:35:21
rafej:
To je pravda. Ale nevedlo by to ke zobrazení kódu funkce. |
||
rafej Profil |
#6 · Zasláno: 25. 9. 2014, 13:39:31
Joker:
Pravda, ale kdo ví, co s tím vlastně dělá. |
||
snazimse Profil |
#7 · Zasláno: 25. 9. 2014, 14:18:59
Joker:
Přesně tak,je to jedno.V tomto případě,výsledek je stejný.Ale zajímá,mě zda by jste mi mohl vysvětlit,s tím return a echo,proč mi to hází,takové výsledky,viz můj příspěvek výše zvýrazněné.Děkuji! |
||
xROAL Profil |
#8 · Zasláno: 25. 9. 2014, 17:01:58
snazimse:
Je to z toho dôvodu, že return niečo vráti a ukončí beh funkcie. echo nič neukončuje, iba pošle výstup do prehliadača a pôvodná funkcia pokračuje ďalej.
<?php function skuska(){ return true; echo "Hello World"; // toto sa nikdy nevypíše, pretože funkcia skuska() sa ukončí hneď po tom ako sa vykoná return } funkcia skuska2(){ echo "Hello World"; // v tomto prípade sa vypíše "Hello World" return true; echo "Toto už sa zase nevypíše, pretože return ukončil beh funkcie"; } $var1 = skuska(); // premenna bude mať hodnotu true, nič sa nevypíše $var2 = skuska2(); // vypíše sa Hello World a $var2 bude mať hodnotu true |
||
rafej Profil |
V příspěvku #3 máš první kód funkce nesmyslně napsaný.
Bez ohledu na podmínku vrací funkce při každém průchodu aktuální prvek pole a použití return zároveň ukončí cyklus při prvním průchodu, takže dostaneš 1.
Pokud chceš ve funkci provést další kontroly nebo dokončit cyklus musíš si výsledky někam uložit a return použít až na konci funkce.
V druhém příkladu máš tu funkci zase jinak, a měla by vždy vracet číslo 3. Proč to sem vkládáš v několika verzích. Kdo má vědět, která ti právě vrací problémy. xROAL Jsi mě předběhl a vypadá to, že jsi na to kápl. Že to echo používá uvnitř funkce místo return mě tedy nenapadlo.
|
||
snazimse Profil |
#10 · Zasláno: 25. 9. 2014, 18:31:02
rafej, xROAL:
Díky za reakce,pomohli jste mi.Nicméně,rafej,zajímalo by mě, vaše reakce: Pokud chceš ve funkci provést další kontroly nebo dokončit cyklus musíš si výsledky někam uložit a return použít až na konci funkce. Kam bych to měl ukládat? Do další proměnné? Děkuji ještě jednou! |
||
xROAL Profil |
#11 · Zasláno: 25. 9. 2014, 19:23:51
snazimse:
„Kam bych to měl ukládat? Do další proměnné?“ Áno, tak sa to robí bežne. |
||
Časová prodleva: 10 let
|
0