Ar trebui să fac caching la ce întoarce o funcție?

Salut, as dori sa stiu daca exista vreo diferenta, intre cele doua, mentionate mai jos.
De exemplu am nevoie de variabila $logat, de 2x, care primeste valoare de la functia logat();

$logat = logat();
if($logat)
{
echo 'ceva';
}
....
//a doua oara
if($logat)
{
echo 'altceva';
}

Si dac-as folosi

if(logat()) si din nou, logat();

Care imi ia din baza de date, ar fi vreo diferenta de raspuns?Ma gandesc ca daca folosesc o singura data,cum e mai sus ($logat=logat() ), deja am stabilit output-ul ,iar daca ma folosesc de functie, mi-ar face de mai multe ori interogarea. Este corect?

Scuze, am uitat sa mentionez, cand ma refer la “diferenta de raspuns”, vreau sa spun ca timpul de raspuns.

Mai eficient e sa apelezi o singura data functia si sa pui raspunsul intr-o variabila asa cum ai facut deja.

2 Likes

Cred că răspunsul este „depinde”. Ce face metoda logat()? Dacă doar întoarce o variabilă (return $this->esteLogat) probabil nu se simte nici o diferență de performanță.

Dar dacă metoda face mai mult de atât, stochează-o într-o variabilă și folosește acea variabilă pentru condiții.

1 Like

Daca de fiecare data cand este apelata efectueaza o interogare in baza de date, o poti face sa arate in felul acesta si ai scapat de problema.

    function logat() {
      static $isLogat;
         
      if ( ! $isLogat) {
        // Mysql
         $isLogat = 'ce procesari faci tu';
      }

      return $isLogat;
    }
2 Likes

n-ar fi mai simplu sa pastrzi in sesiune? faci autentificarea si bai datele in sesiune. daca ai date in sesiune esti logat, daca nu… pa

Pai asta face functia logat. Setez o sesiune $_SESSION[‘logat’] cu o valoare pe care-o inserez in baza de date.Si chiar daca e setata sesiunea, tot va trebui verificata in baza de date.