Autor Zpráva
fury
Profil *
Dobrý den, chci se zeptat na jednoduchou věc a to kdy se vykonává function. Jde mi o to zda se vyplatí všechny funkce dát do jednoho souboru nebo jestli se tím prodlužuje doba načítání stránek.

Spíše zní otázka: i kdyby jsem měl třeba 100 funkcí v jednom souboru a spuštěná stránka vyvolávala jen jeden znich. Načítají se i ostatní nebo si podmínky bere jen při zavolání?

Děkuji všem za rady
Rellik
Profil
No soubor se musí projít celý aby se vybrala určitá funkce. Takže když budeš volat poslední funkci ze sta, tak se projdou i předchozí. Na času to ale opravdu nepoznáš. Jestli se stránka načte například za 0,05s nebo 0,06 sekundy je myslím úplně jedno..
fury
Profil *
Děkuju. Vím, že časově to zase není nic náročného, ale zajímalo mě jestli si bere volání nebo projde všechno. Třeba pokud stránka má volání na jednu funkci, tak jestli se ostatní ignorují. Jo, přečte, že je tam funkce třeba sifruj_mail, ale zajímalo mě jestli bude procházet vnitřek podmínek ve funkci pokud tato funkce nebo volána. Vlastně jste mi odpověděl, že ano potom to znamená, že funkce je pouze pro ulehčení a vyšší přehlednost kodu. Chápu to dobře?
php
Profil
Pro ulehčení, vyšší přehlednost, navíc funkce muže volat sama sebe (tzv. rekurze) , takový malý příklad je klasický faktroriál čísla:
function Faktorial ($n){
if ($n == 0)  return 1;
else  return $n * Faktorial ($n - 1);
}

takové to volání ti ulehčí v některých případech až desítky řádků kódu.
Co se týče rychlosti tak je opravdu zanedbatelná, ale pokud uděláš něco takového:
function a(){
  function b(){
  }
}

Tak se sice při načtení stránky veškerý obsah skriptu zkompiluje, ale funkce b() se nedefinuje do doby, než zavoláš funkci a(), takže teoreticky by tohle mohlo být rychlejší, otázka je do jaké míry to bude ještě přehledné.
fury
Profil *
php:
děkuju. Tak už jsem zase o něco chytřejší :-) Ale pokud tomu dobře rozumím
"funkce b() se nedefinuje do doby, než zavoláš funkci a()"

function Faktorial ($n){ //při načítání prohlížeč načte a ví, že je funkce "Faktorial"
if ($n == 0)  return 1;// toto se načítá pouze pokud je volaná funkce
else  return $n * Faktorial ($n - 1);// toto se taky načítá pouze pokud je volaná funkce
}

Podle Vašeho popisu jsem to tak pochopil :-) nebo jsem zabedněnej?
php
Profil
když se načítá stránka, tak se kompiluje(načítá) celý skript, řádek po řádku,nezávysle natom co na daným řádku je, což si můžete vyzkoušet, třeba úmyslným vyvoláním chyby, napište si na stránku třeba jen tuhle jednu funkci a nikde ji nevolejte:
function Faktorial ($n){
if ($n == 0)  retur 1; //if ($n == 0)  return 1;
else  return $n * Faktorial ($n - 1);
}

"funkce b() se nedefinuje do doby, než zavoláš funkci a()": tohle s tím nemá nic společnýho, ale vyzkoušet jak jsem to myslel si taky můžete
1) vyzkoušejte na stránce prvně tenhle skritp:
function Faktorial ($n){
  if ($n == 0)  return 1;
  else  return $n * Faktorial ($n - 1);
}
echo Faktorial(5);

2) a pak si zkuste tohle:
function a(){
    function Faktorial ($n){
        if ($n == 0)  return 1;
        else  return $n * Faktorial ($n - 1);
    }
}
Faktorial(5); 
//vypíše chybu - Fatal error: Call to undefined function Faktorial() in C:\dev\www\web\test.php on line 25

abych moh použít funkci faktorial musím udělat tohle:
a();
echo Faktorial(5);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0