PHP: Ôóíêöèè
Àâòîð: | Àðòåìüåâ Ñåðãåé Èãîðåâè÷ |
ICQ: | 438856621 |
email: | _spin_@bk.ru |
Ôóíêöèÿ - ýòî èìåíîâàííûé íàáîð âûðàæåíèé, âûïîëíÿþùèõ îïðåäåë¸ííóþ çàäà÷ó. ×àùå âñåãî ôóíêöèè èñïîëüçóþòñÿ äëÿ ìíîãîêðàòíîãî âûïîëíåíèÿ îäíîé è òîé æå ïîñëåäîâàòåëüíîñòü äåéñòâèé, íî íàä ðàçíûìè èñõîäíûìè äàííûìè è â ðàçíûõ ìåñòàõ ñêðèïòà.
Ôóíêöèè áûâàþò ïîëüçîâàòåëüñêèå è ñèñòåìíûå. Ïîëüçîâàòåëüñêèå ôóíêöèè (êàê ñëåäóåò èç íàçâàíèÿ) ïðîãðàììèñò ïèøåò ñàìîñòîÿòåëüíî. Ñèñòåìíûå ôóíêöèè âñåãäà äîñòóïíû èç ëþáîãî ìåñòà ñêðèïòà è îáúÿâëÿòü èõ íå íàäî.
Ïîëüçîâàòüñÿ ôóíêöèÿìè î÷åíü ïðîñòî. Îáúÿâëÿåòñÿ ôóíêöèÿ ñëåäóþùèì îáðàçîì:
<?php function mySampleFunction($parameter1, $parameter2) { // íàáîð âûðàæåíèé (òåëî ôóíêöèè) // return âîçâðàùàåìîå_çíà÷åíèå } ?>
Ëþáàÿ ôóíêöèÿ èìååò èìÿ, ñïèñîê ïàðàìåòðîâ, òåëî ôóíêöèè è âîçâðàùàåìûå äàííûå. Ïðàâèëà èìåíîâàíèÿ ôóíêöèé àíàëîãè÷íû ïðàâèëàì äÿ ïåðåìåííûõ. Ïàðàìåòðû çàïèñûâàþòñÿ â ñêîáêàõ ÷åðåç çàïÿòóþ, à åñëè ôóíêöèè íå òðåáóþòñÿ ïàðàìåòðû - äîëæíû ñòàâèòñÿ ïóñòíûå ñêîáêè "()". Ëþáàÿ ôóíêöèÿ äîëæíà âîçâðàùàòü êàêîå-ëèáî çíà÷åíèå. Åñëè â êîäå ôóíêöèè íå âñòðå÷àåòñÿ âûðàæåíèå return, òî ñ÷èòàåòñÿ, ÷òî ôóíêöèÿ âîçâðàùàåò ïóñòîå çíà÷åíèå. Íåìàëîâàæíûé ôàêò - â PHP òèï âîçâðàùàåìûõ äàííûõ çàðàíåå íå îïðåäåë¸í. Ïîýòîìó îäíà ôóíêöèÿ ìîæåò âîçâðàùàòü çíà÷åíèÿ ñ ðàçëè÷íûìè òèïàìè äàííûõ â çàâèñèìîñòè îò âõîäíûõ ïàðàìåòðîâ.
<?php // Ôóíêöèÿ âûâîäèò ñîîáùåíèå ïîëüçîâàòåëÿ ñ // ñîîòâåòñòâóþùèì îïèñàíèåì â çàâèñèìîñòè îò // âàæíîñòè ($severity). // Âîçâðàùàåò ïóñòîå çíà÷åíèå function showError($severity, $error) { switch($severity) { case 0: echo 'Ñîîáùåíèå: '; break; case 1: echo 'Ïðåäóïðåæäåíèå: '; break; case 2: echo 'Îøèáêà: '; break; case 3: echo 'Êðèòè÷åñêàÿ îøèáêà: '; break; default: echo 'Íåèçâåñòíî: '; break; } echo $error . "<br />\n"; } ?>
Òåïåðü â ëþáîì ìåñòå ñêðèïòà ìîæíî íàïèñàòü
<?php showError(0, 'Ôóíêöèÿ ðàáîòàåò'); ?>
è â áðàóçåð áóäåò âûâåäåíî
Ñîîáùåíèå: Ôóíêöèÿ ðàáîòàåò
Ðàññìîòðèì áîëåå èíòåðåñíûé âàðèàíò ïðèìåíåíèÿ - ôóíêöèþ ïðåîáðàçîâàíèÿ äàííûõ. Íàïðèìåð, ó íàñ åñòü ñïèñîê, ñîäåðæàùèé ïîëíûå èìåíà, ôàìèëèè è îò÷åñòâà ñîòðóäíèêîâ. Íàì äëÿ ñîñòàâëåíèÿ îò÷¸òà íàäî ïðåîáðàçîâàòü ïîëíîå ÔÈÎ ê ôîðìàòó ôàìèëèè ñ èíèöèàëàìè, ò.å. ïðåîáðàçîâàòü "Èâàíîâ Àëåêñàíäð Âëàäèìèðîâè÷" â "Èâàíîâ À.Â.".
Ôóíêöèÿ äëÿ ïðåîáðàçîâàíèÿ áóäåò âûãëÿäåòü òàê:
<?php /* $f - ôàìèëèÿ $i - èìÿ $o - îò÷åñòâî */ function convertFIO($f, $i, $o) { if(!isset($f) || !isset($i) || !isset($o)) return false; // Ïðèñâàèâàåì ðåçóëüòàòó ôàìèëèþ $result = $f; // äîáàâëÿåì ïåðâûé ñèìâîë èìåíè è òî÷êó $result .= substr($i, 0, 1) . '.'; // äîáàâëÿåì ïåðâûé ñèìâîë îò÷åñòâà è òî÷êó $result .= substr($o, 0, 1) . '.'; // Ïîçâðàùàåì ðåçóëüòàò return $result; } ?>
à êîä äëÿ âûçîâà ôóíêöèè áóäåò âûãëÿäåòü òàê:
<?php // ñ÷èòûâàåì äàííûå èç ôàéëà $fulls = file('fullnames.txt'); $shorts = array(); // îáðàáàòûâàåì êàæäóþ ñòðîêó èñõîäíîãî ôàéëà foreach ($fulls as $value) { // ðàçäåëÿåì ñòðîêó íà ôàìèëè, èìÿ, îò÷åñòâî list($f, $i, $o) = split(' ', $value); // ïîëó÷àåì ñîêðàù¸ííóþ ôîðìó $fio = convertFIO($f, $i, $o) . "\n"; // åñëè ôóíêöèÿ íå âåðíóëà false // äîáàâëÿåì ðåçóëüòàò â âûõîäíîé ìàññèâ if($fio) $shorts []= $fio; } // ñîõðàíÿåì ïîëó÷åííûå äàííûå â ôàéë file_put_contents('shortnames.txt', implode('', $sorts)); ?>
Ïðè èñïîëüçîâàíèè ôóíêöèé íåîáõîäèìî ïîìíèòü ñëåäóþùåå:
-  òåëå ôóíêöèè èñïîëüçóþòñÿ êîïèè ïàðàìåòðîâ, ïîýòîìó âñå èçìåíåíèÿ ïåðåìåííûõ áóäóò ïîòåðÿíû ïðèâûõîäå èç ôóíêöèè. Ìû óæå ðàññìàòðèâàëè òàêîé ïðèìåð ïðè èçó÷åíèè îáëàñòåé âèäèìîñòè ïåðåìåííûõ.
- Åñëè ïàðàìåòð äîëæåí áûòü èçìåí¸í â ôóíêöèè - íåîáõîäèìî ïåðåäàâàòü åãî ïî ññûëêå, ò.å. â îïèñàíèè ôóíêöèè íàäî ïåðåä èìåíåì ïàðàìåòðà äîáàâèòü "&": function func($p1, &$p2) { }
- Â ñòàðûõ âåðñèÿõ PHP ôóíêöèÿ äîëæíà áûëà áûòü îáúÿâëåíà äî ïåðâîãî èñïîëüçîâàíèÿ, íî â PHP âåðñèè 4.3 è âûøå ïîðÿäîê îáúÿâëåíèÿ è èñïîëüçîâàíèÿ ôóíêöèè ìîæåò áûòü ëþáûì.
Êàê âèäèòå, èñïîëüçîâàíèå ôóíêöèé ïîçâîëÿåò ñóùåñòâåííî ñîêðàòèòü êîä è ïîâûñèòü åãî ÷èòàåìîñòü. Êðîìå òîãî, èñïîëüçîâàíèå ôóíêöèé çíà÷èòåëüíî îáëåã÷àåò îòëàäêó è ñîâåðøåíñòâîâàíèå êîäà, ò.ê. âñå íóæíûå âûðàæåíèÿ íàõîäÿòñÿ â îäíîì ìåñòå è íå íàäî ëîïàòèòü âåñü ñêðèïò â ïîèñêàõ íóæíûõ ó÷àñòêîâ. Êðîìå òîãî, óìåíèå ïîëüçîâàòüñÿ ôóíêöèÿìè î÷åíü ïðèãîäèòñÿ ïðè èçó÷åíèè ðàáîòû ñ êëàññàìè â îäíîì èç ñëåäóþùèõ óðîêîâ.