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
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;
         }  
       
     }
   
}
Vrátí mi to,první položku pole z foreach,kdyžto echo všechny ve foreach,je to v pořádku?
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
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
rafej:
To je pravda. Ale nevedlo by to ke zobrazení kódu funkce.
rafej
Profil
Joker:
Pravda, ale kdo ví, co s tím vlastně dělá.
snazimse
Profil
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
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
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
snazimse:
Kam bych to měl ukládat? Do další proměnné?
Áno, tak sa to robí bežne.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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