PHP/Funkcijos

Iš Wikibooks.
< PHP
PHP Programavimas
Redaguoti

Įžanga[keisti]

Funkcijos (kartais vadinamos metodais) yra būdas grupuoti bloką fukcijų nevienkartiniam paprastam naudojimui.

Funkcijos programavime yra panašios į matematines funkcijas (pvz.: sin(x) - duos tam tikrą skaičių priklausomai nuo rezultato). Funkcijos pagreitina darbą.

Norėdami surasti pilną PHP funkcijų sarašą, užeikite į PHP interneto puslapį http://www.php.net/manual/en/funcref.php.

Funkcijų kūrimas[keisti]

PHP funkcijos aprašymas panašus į C stilių

function funkcijos_vardas([parameterai])
{
  // kodas
  return true;
}
  • function žodis nusako parser`iui kad jūs deklaruojante funkciją.
  • Kiekviena funkcija turi savo vardą (funkcijos_vardas).
  • Funkcijos turi parametrus, jei juos nustatote
  • Return gražina kokį nors kintamajį ar panašiai. Jo nebūtina rašyti. Tuo atveju funkcija gražins NULL.

Kviečiant funkciją PHP kalboje[keisti]

Žinokite, kad echo nėra funkcija, todėl jai nereikia skliaustų.

Kviečiant funkciją jums leis nepaleisti ir naudoti ta funkciją leidžiant skriptą.

print('Mano vardas yra Petras');

Rašant funkciją kitame bloke:

<?php
if ( $a == 72 )
{
  print('Mano vardas yra Petras. $a yra 72');
}
?>

Kviečiant funkciją ir gaunant rezultatą:

<?php
$rezultatas = sudeti($a, 5);
?>

Naudojant kitų funkcijų blokuose:

<?php
while ( $i < count($vienas) )
{
  echo count(range(1,$i))."<br>\n";
}
?>

Parameterai[keisti]

Parameterai yra kintamieji, kurie egzistuoja tiktai pačioje funkcijoje. Juos galima paduoti kaip vidinius kintamuosius arba kaip rodykles:

<?php
function sudeti($vienas, $du)
{
  $rezultatas = $vienas + $du;
  return $rezultatas;
}
?>
Norint iškviesti šią funkciją, reikia paduoti du parametrus:
<?php 
echo sudeti(1,5);
?>

Retkarčiais, programuotojas nenorėtu naudoti visų parametrų, arba tiesiog nerašyti jų (nes jie gali būti vienodi):

<?php
function sudeti($vienas = 10, $du = 15)
{
  return $vienas + $du;
}
echo sudeti()."\n";
echo sudeti(1)."\n";
echo sudeti(1,2)."\n";
?>

Pridėti parametrų numerį be limito yra paprasta, naudojant func_num_args, func_get_args ir func_get_arg funkcijomis:

<?php
function vidurkis()
{
  $sudetis = 0;
  $parametru_numeris = func_num_args();
  for ( $i = 0; $i < $param_count; $i++ )
  {
    $sudetis += func_get_arg($i);
  }
  $vidurkis = $sudetis / $parametru_numeris;
  return $vidurkis;
}
echo vidurkis(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
?>

Arba dar paprasčiau:

<?php
function vidurkis()
{
  $all = func_get_args();
  return array_sum($all) / count($all);
}
echo vidurkis(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
?>

Grąžinant duomenis[keisti]

Duomenis galima grąžinti dviejais budais: return naudojimu:

<?php
function duok_penkis()
{
  return 5;
}
$kin = 0;
$kin = duok_penkis();
?>

arba, naudojantis sujungtais parametrais:

<?php
function duok_penkis(&$var)
{
  $var = 5;
}
$kin = 0;
duok_penkis($kin);
?>

Žinokite, kad return sustabdo funkciją ir tęsia leidimą po funkcijos kvietimo. Grąžinant skirtingus duomenis galima naudoti masyvus:

<?php
function duok_numerius()
{
  $ret = array();
  $ret[] = 1;
  $ret[] = 5;
  $ret[] = 80;
  return $ret;
}
print_r(duok_numerius());
?>

Realaus laiko funkcijų naudojimas[keisti]

Programuotojas gali kurti funkcijas vietoj function vardas($parametras...) {} sintakses. Šitokie metodai leidžia kurti funkcijas dinamiškai.

Kviečiant funkciją, kurios vardas yra kintamojo reikšmė[keisti]

Galima tai daryti dviem būdais, tiesioginiu kvietimu arba call_user_func or call_user_func_array:

Tiesioginis funkcijos kvietimas[keisti]

<?php
$tekstas = "\n\n";
$funckcijos_pavadinimas = "nl2br";
$isvedimas = $funckcijos_pavadinimas($tekstas);
echo $isvedimas;
?>

Klasės kvietimas:

<?php
$patikrinti = "bZz...";
$klases_vardas = "mano_klase";
$funkcijos_vardas = "mano_funkcija";
${$klases_vardas}->$funkcijos_vardas($patikrinti);
?>

Šis kodas dirba taip pat kaip:

<?php
$patikrinti = "bZz...";
$mano_klase->mano_funkcija($patikrinti);
?>

call_user_func* naudojimas[keisti]

Šiuose pavyzdžiuose bus naudojama daugiau nei vienas parametras tik parodyti kaip galima naudotis šiomis galimybėmis:

<?php
class Some_Class {
  function my_function($text1, $text2, $text3) {
    $return = $text1."\n\n".$text2."\n\n".$text3;
    return $return;
  }
}
$my_class=new Some_Class();
?>

call_user_func:

<?php
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = array(&$my_class,"my_function");
$result = call_user_func($callback_func,$one,$two,$three);
echo $result;
?>

call_user_func_array:

<?php
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = array(&$my_class,"my_function");
$result = call_user_func_array($callback_func,array($one,$two,$three));
echo $result;
?>

Kviečiant paprastą funkciją: call_user_func:

<?php
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = "my_function";
$result = call_user_func($callback_func,$one,$two,$three);
echo $result;
?>

call_user_func_array:

<?php
$one = "One";
$two = "Two";
$three = "Three";
$callback_func = "my_function";
$result = call_user_func_array($callback_func,array($one,$two,$three));
echo $result;
?>

Sudėtingesni pavyzdžiai[keisti]

<?php
$my_func($param1, $param2);
${$my_class_name}->$my_func($param1, $param2);

call_user_func($my_func, $param1, $param2);

call_user_func(array(&${$my_class_name}, $my_func), $param1, $param2);

call_user_func_array($my_func, array($param1, $param2));
// Most powerful, dynamic example
call_user_func_array(array(&${$my_class_name}, $my_func), array($param1, $param2)); 
?>

Kuriant realaus laiko funkcijas[keisti]

<?php
$function_name=create_function('$one, $two','return $one+$two;');
echo $function_name."\n\n";
echo $function_name("1.5", "2");
?>

create_function