Funkcie

Porovnanie :: Perl | Python

Deklarácia funkcie

function [&] meno funkcie([trieda1] [&] param1 [= hodn1], ..., [triedaN] [&] paramN [= hodnN])
{
  // telo funkcie
  [return návratová hodnota;]
}

Ak je pred menom funkcie znak ampersand (&), premenná za príkazom return je vrátená odkazom.

Typ parametra funkcie (či metódy) je možné obmedziť na inštanciu konkrétnej triedy alebo triedy, ktorá túto triedu rozširuje uvedením povoleného typu (triedy) pred vlastný názov parametra.

Telo funkcie môže obsahovať akýkoľvek platný kód PHP (teda aj definíciu ďalších funkcií).
Veľké a malé písmená sa v mene funkcie nerozlišujú.
Preddefinovanie a oddefinovanie definovaných funkcií nie je možné.
Nepovinné parametre musia byť deklarované ako posledné.

Volanie funkcie

meno funkcie([argument1, .... argumentN])

Funkcia je volaná svojím menom a dvojicou zátvoriek, medzi ktorými môže byť uvedený zoznam argumentov oddelených čiarkou.

Funkcia bez parametrov

<?php
function vypis()
{
  echo "Toto je stránka o LAMP technológiách.\n";
}

// volanie vytvorenej funkcie
vypis();
?>

Porovnávacie príklady

Funkcia s parametrami

<?php
function pozdrav($meno)
{
   echo "Ahoj ". $meno . "!\n";
}

pozdrav("Martin");
pozdrav("Miro");
?>

Funkcia s premenným počtom parametrov

func_num_args() vracia počet parametrov, ktoré boli funkcii predané.
func_get_arg() vracia hodnotu parametra s indexom, ktorý bude parametrom tejto funkcie.
Funkcia func_get_args() umožňuje vytvoriť pole zo zoznamom hodnôt parametrov.

<?php
function pocet()
{
  return func_num_args();
}

echo pocet(); // vypíše 0
echo pocet(3, 8, 15); // vypíše 3
echo pocet("test", 33); // vypíše 2
echo pocet("", 0, 0.0); // vypíše 3
?>

Funkcia pocet() vypisuje počet parametrov, ktoré jej boli predané.

<?php
function vypisParam()
{
  $params = func_get_args();
  foreach ($params as $i => $x)
    echo "Parameter " . $i . ": " . $x . "\n";
}

vypisParam("Martin", "Miro", 6); // funkcia zvládne ľubovoľný počet parametrov
?>

Porovnávacie príklady

Funkcia vypisParam() uloží všetky parametre do poľa a pole prechádza pomocou foreach.

Funkcia s návratovou hodnotou

<?php
function myMax()
// nie je možné deklarovať funkciu max(), tá už je v PHP deklarovaná
{
if (!func_num_args()) exit;
  // ak nie je zadaný žiadny parameter, funkcia skončí
$temp = func_num_args(0);   // za dočasné maximum označíme prvý prvok
for ($i = 1; $i < func_num_args(); $i++)
  if (func_get_arg($i) > $temp) $temp = func_get_arg($i);
  // ak je ďalšia hodnota väčšia, uložíme ju do premennej temp
return $temp;
}

echo myMax(8, 3, 4);// funkcia zvládne ľubovoľný počet parametrov
?>

Porovnávacie príklady

Vkladanie súborov

Veľmi užitočnou vlastnosťou PHP je možnosť vkladať do našich skriptov obsah ďalších súborov. Množstvo webových serverov podporuje SSI. Vložením súboru môžeme napríklad vložiť do všetkých našich webových dokumentov štandardnú hlavičku. V PHP to môžeme použiť pre vloženie často používaných častí kódu. Môžeme napríklad funkcie používané v mnohých súboroch (alebo rôznych projektoch) umiestniť do samostatného súboru a jednoduchým vložením ich v každom dokumente sprístupniť. Výhodou tohoto postupu je nielen úspora miesta na serveri, ale predovšetkým ľahšia správa - úprava určitej funkcie je vykonávaná iba na jednom mieste.
PHP umožňuje vkladať obsah súborov pomocou niekoľkých príkazov, ktoré sa navzájom mierne odlišujú.

require a include

Príkazy require a include zadaný súbor vložia do aktuálneho dokumentu na miesto, kde sa tento príkaz objavil. Syntax je veľmi jednoduchá:

require "subor.php";
require("subor.php");
include "subor.php";
include("subor.php");

Pokiaľ zadaný súbor existuje, je vložený do dokumentu. Jediným rozdielom medzi oboma príkazmi je to, akým spôsobom riešia situáciu, keď špecifikovaný súbor neexistuje. Príkaz require (slovensky požadovať) v takom prípade úplne ukončí vykonávanie skriptu s fatálnou chybou a chybovým hlásením. Naproti tomu include (slovensky vložiť) sa pokúsi súbor načítať a vložiť, ale ak sa mu to nepodarí, vráti odpovedajúce varovanie o neexistencii súboru a vykonávanie dokumentu pokračuje ďalej.
Pred vložením súboru je opustený režim vykonávania PHP (aby sa ľahšie vkladali HTML súbory), takže ak chceme vkladať kód PHP, je potrebné ho umiestniť do bežných oddeľovačov.

Príklad

Súbor menu.php:

<html>
<body>
<a href="http://www.example.com/index.php">Hlavná stránka</a> -
<a href="http://www.example.com/omne.php">O mne</a> -
<a href="http://www.example.com/odkazy.php">Odkazy</a> -
<a href="http://www.example.com/kontakt.php">Kontakt</a> <br />

Súbor index.php:

<?php include("menu.php"); ?>
<p>Vitajte na mojej stránke, kde som použil funkciu include na urýchlenie práce :-)</p>
</body>
</html>

Podobne vytvoríme aj ďalšie súbory (omne.php, odkazy.php, kontakt.php).
Súbor menu.php sme v tomto príklade umiestnili v tom istom priečinku ako aj ostatné súbory. Ak sa vkladaný súbor nachádza v inom priečinku, je potrebné zadať k nemu cestu, napríklad takto:

include "/funkcie.php";
// načíta súbor funkcií uložených v koreňovom adresári
include "./funkcie.php";
// načíta z aktuálneho adresára súbor funkcií

Ďalšie funkcie na vkladanie súborov

Funkcie require_once a include_once sú veľmi podobné funkciám require a include. Jediným rozdielom medzi odpovedajúcimi funkciami je, že funkcie require_once a include_once vložia súbor iba raz, pri opakovanom pokuse o vloženie k ďalšiemu vloženiu nedôjde. Zároveň sa tým vyhneme chybovým hláseniam o tom, že sa pokúšame znova definovať rovnakú funkciu a pod.