Autor Zpráva
FilipTarbaj
Profil
Ahoj, bude to asi blbost, ale vzhledem k tomu, že jsem začátečník, nejak logicky si nedokážu vyvodit, proč dělat funkce, když prakticky můžu "funkci" vložit do samotného souboru .php a vložit ho do kodu pomocí funkce "include" a nemusím řešit to, že proměnná funguje pouze ve fuknci.

Vím, že ty funkce určitě mají smysl, proto mohl by mi ukázat někdo malý příklad, kde to využiji oproti include? Díky
Fisir
Profil
Reaguji na FilipaTarbaje:
Do include nenacpeš parametry. Je sice pravda, že můžeš použít specificky pojmenované proměnné, ale byla by to otrava.

Funkce navíc často něco vrací, což už nijak dobře (možná opět přes specifickou proměnnou) suplovat nejde.

Navíc by to byla hrozná spousta souborů.
juriad
Profil
Právě že největší výhodou funkcí je to, že se na ně můžeš spolehnout. Je přesně definováno, co jim máš předat (v případě includu soubor jen očekává, že nějaké proměnné budou naplněné, ale nikdo nezaručí, že skutečně budou) a co vrací (include může změnit jakoukoli proměnnou v okolí). Funkce se mnohem snáze ladí.

Příklady mě napadají jen triviální nebo příliš složité. Ale třeba klasické zjistění, zda číslo je sudé:

function sude($n) {
  return $n % 2 == 0;
}

if (sude(6)) {
  echo "Ano!"
}


Oproti includu (sude.php):
<?php $sude = $n %2 == 0;

A jeho použití:
$n = 6;
include 'sude';
if ($sude) {
  echo 'Ano!';
}
Chro.
Profil
Od určité verze PHP (nemůžu to najít) se uživatelská funkce může používat ještě předtím, než je definována níže v kódu. Lze tedy na konec skriptu vložit vlastní funkce sdružené např. do souboru functions.inc.php, přidat je do skriptu na konci
include 'functions.inc.php';
a bez obav je používat už od prvního řádku kódu.
mimochodec
Profil
Chro.:
Od určité verze PHP (nemůžu to najít) se uživatelská funkce může používat ještě předtím, než je definována níže v kódu.

To už platí asi hodně dávno. Nevzpomínám, že by to někdy nefungovalo.
Joker
Profil
FilipTarbaj:
prakticky můžu "funkci" vložit do samotného souboru .php a vložit ho do kodu pomocí funkce "include" a nemusím řešit to, že proměnná funguje pouze ve fuknci.

Jak píše juriad, je to přesně naopak.
Mít všechny proměnné na jedné hromadě je velká nevýhoda.
Jednak u include neexistuje mechanismus, kterým bych mohl říct, které proměnné je nutné před voláním nastavit. Můžu leda tak dát na začátek komentář, ale to musí být udržovaný aktuální (když něco přidám), musí si ho někdo přečíst a nesmí z něj nic zapomenout. IDE mě neupozorní, že by podtrhlo include pokud vynechám nějaké proměnné.
A jednak vzniká klasický problém, že některé názvy proměnných se používají často a když je celý skript v globálním kontextu, snadno vznikají kolize (tj. z pohledu programátora dvě logicky různé proměnné na dvou různých místech dostanou stejný název, z pohledu PHP to je samozřejmě pořád jediná proměnná). Nedá se určit, odkud kam má která proměnná platit a to je zdrojem záhadných chyb, jejichž průzkum zabere spoustu času.

A velká výhoda funkcí je, že je jasně vidět, co jde dovnitř, co jde ven a platnost vnitřních proměnných je ohraničená kontextem funkce, takže nehrozí, že mi nějaké hodnoty omylem „propadnou“ dovnitř, nebo „vytečou“ ven.
Keeehi
Profil
Zmíním to tu je pro úplnost, všechny předchozí upozornění jsou platné. Následující používejte jen pokud víte, co opravdu děláte. Tudíž vlastně nikdy. *
Z include se dá vracet návratová hodnota stejně jako z funkce:

inc.php
$foo = 42;
return $foo;

index.php
$bar = include 'inc.php';
// $bar == 42

* Tím nemyslím že nikdy nebudete vědět co děláte ale že když budete vědět co děláte, tak to nikdy potřebovat nebudete.

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: