PHP/Funkcijos

< PHP
(Nukreipta iš PHP:Funkcijos)
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