Ââåäåíèå â èçó÷åíèå ÿçûêà php
Çäðàâñòâóéòå! Ñ ñåãîäíÿøíåãî äíÿ ìû íà÷èíàåì ñåðèþ ïóáëèêàöèé î
ïðîãðàììèðîâàíèè íà PHP. Â ýòîé ñòàòüå ìû äàäèì êðàòêóþ
ââîäíóþ è ïîñâÿòèì âàñ â ïëàíû íà áóäóùåå. Ïîñêîëüêó â èíòåðíåòå óæå
ñóùåñòâóåò äîñòàòî÷íîå êîëè÷åñòâî ñàéòîâ î PHP, ïóáëèêóþùèõ
ìàòåðèàëû, ðàññ÷èòàííûå íà íîâè÷êîâ, ìû ïðèíÿëè ðåøåíèå â îñíîâíîì
îðèåíòèðîâàòüñÿ íà ëþäåé, óæå íåñêîëüêî ðàçáèðàþùèõñÿ â
PHP-ïðîãðàììèðîâàíèè. Ýòî íåîáõîäèìî äëÿ òîãî, ÷òîáû ïîíèìàòü
ïðèìåðû êîäà, êîòîðûå áóäóò ïðèâîäèòüñÿ â äàëüíåéøåì.
Òåì íå ìåíåå, íåñìîòðÿ íà ïðåäïîëàãàåìóþ ïîäãîòîâëåííîñòü
÷èòàòåëÿ, â ïåðâîé ñòàòüå ìû äàäèì êðàòêèé îáçîð ïî PHP
âîîáùå - ÷òî îí èç ñåáÿ ïðåäñòàâëÿåò, êàêèå çàäà÷è ñ åãî ïîìîùüþ
ñëåäóåò ðåøàòü, íåêîòîðûå îñîáåííîñòè ñèíòàêñèñà, è ò.ï.
×òî òàêîå PHP?
PHP (åãî ïîëíîå íàçâàíèå: PHP: Hypertext
Preprocessor) - ýòî ÿçûê, ïðåäíàçíà÷åííûé äëÿ áûñòðîãî ñîçäàíèÿ
äèíàìè÷åñêèõ web-ñòðàíèö. Ñèíòàêñèñ ÿçûêà ïîõîæ íà Ñ,
Java è Perl, îäíàêî èìååò è ñâîè, ïðèñóùèå òîëüêî åìó
îñîáåííîñòè. Â îôèöèàëüíîé äîêóìåíòàöèè PHP îïðåäåëÿåòñÿ êàê
server-side HTML-embedded scripting language (âñòðàèâàåìûé â
HTML ñêðèïòîâûé ÿçûê ñ îáðàáîòêîé íà ñåðâåðå). Èç ýòîãî
îïðåäåëåíèÿ ìîæíî âûäåëèòü äâà îñíîâíûõ ìîìåíòà:
- Îáðàáîòêà êîäà PHP ïðîèçâîäèòñÿ íà ñåðâåðå, à íå â
áðàóçåðå êëèåíòà, êàê, íàïðèìåð JavaScript
- Êîä PHP ìîæåò áûòü âñòðîåí íåïîñðåäñòâåííî â òåëî
HTML ñòðàíèöû, ÷òî âûãîäíî îòëè÷àåò åãî îò Perl.
Íèæå ïðèâåäåí ïðèìåð PHP ñêðèïòà, âçÿòûé èç ôèðìåííîé
äîêóìåíòàöèè ïî PHP, êîä PHP âûäåëåí ñèíèì öâåòîì.
<html>
<head>
<title>Example</title>
</head>
<body>
<?php echo "Hi, I'm a PHP script!"; ?>
</body>
</html>
Èç ýòîãî ïðèìåðà âèäåí ïðèíöèï âñòðàèâàíèÿ êîäà PHP â
HTML êîä ñòðàíèöû: âñå, ÷òî íàõîäèòñÿ ìåæäó íà÷àëüíûì è
êîíå÷íûì òåãîì PHP (<?php è ?>
ñîîòâåòñòâåííî) ñ÷èòàåòñÿ PHP êîäîì è îáðàáàòûâàåòñÿ
èíòåðïðåòàòîðîì PHP.
Íåìíîãî èñòîðèè
Ñîçäàòåëåì PHP ïåðâîíà÷àëüíî áûë Rasmus Lerdorf, íî
ñåé÷àñ ðàçðàáîòêîé ýòîãî ÿçûêà çàíèìàåòñÿ äîâîëüíî áîëüøîå
êîëè÷åñòâî ëþäåé, ïîñòàâèâøèõ ñâîåé çàäà÷åé åãî äàëüíåéøåå
ðàñøèðåíèå è ðàçâèòèå. Çà âðåìÿ ñâîåãî ñóùåñòâîâàíèÿ (à ïåðâàÿ
âåðñèÿ PHP ïîÿâèëàñü â êîíöå 1994 ãîäà) ýòîò ÿçûê ïðåòåðïåë
î÷åíü çíà÷èòåëüíûå èçìåíåíèÿ, êîñíóâøèåñÿ êàê âíåøíåé åãî ñòðóêòóðû
(ñèíòàêñèñà, íàáîðà ôóíêöèé è ò.ï.), òàê è âíóòðåííåé îðãàíèçàöèè.
Ïîñëåäíèé ðàç ïîäîáíûå ãëîáàëüíûå èçìåíåíèÿ êîñíóëèñü PHP ñ
ïîÿâëåíèåì 4-é âåðñèè ýòîãî ÿçûêà, êîãäà PHP áûë ïîëíîñòüþ
ïåðåïèñàí ñ èñïîëüçîâàíèåì Zend scripting engine,
ðàçðàáîòàííûì êîìïàíèåé Zend technologies. Ýòî ïîçâîëèëî äîáàâèòü â
ñèíòàêñèñ ÿçûêà ðÿä íîâûõ ôóíêöèé, à òàêæå ñäåëàòü åãî ñóùåñòâåííî
áûñòðåå, ÷åì ïðåäûäóùèå âåðñèè. Ïðè÷èíîé, ïî êîòîðîé óäàëîñü
äîáèòüñÿ òàêèõ ðåçóëüòàòîâ ÿâëÿåòñÿ òî, ÷òî Zend scripting
engine ÿâëÿåòñÿ íàïîëîâèíó êîìïèëÿòîðîì, ò.å. êîìïèëèðóåò
PHP êîä, à óæ çàòåì ïðîèçâîäèò åãî âûïîëíåíèå, òîãäà êàê
ïðåäûäóùèå âåðñèè PHP áûëè ïî ñâîåé ñóòè èíòåðïðåòàòîðàìè. Â
íàøèõ ïóáëèêàöèÿõ ìû â îñíîâíîì áóäåì âåñòè ðàçãîâîð èìåííî î
PHP âåðñèè 4. Êñòàòè, íà ìîìåíò ïóáëèêàöèè ýòîé ñòàòüè
ïîñëåäíÿÿ îôèöèàëüíàÿ âåðñèÿ PHP èìååò íîìåð 4.0.6
Ãäå âçÿòü PHP è èíôîðìàöèþ î íåì?
Îñíîâíîé èñòî÷íèê èíôîðìàöèè î PHP - ýòî åãî îôèöèàëüíûé
ñàéò: https://www.php.net/. Çäåñü ìîæíî íàéòè äîêóìåíòàöèþ
äëÿ php íà ðàçëè÷íûõ ÿçûêàõ (ê ñîæàëåíèþ ðóññêîãî ñðåäè íèõ íåò),
ïîñìîòðåòü ñïèñîê èìåþùèõñÿ íà äàííûé ìîìåíò áàãîâ è ò.ï.
Åäèíñòâåííûé íåäîñòàòîê ýòîãî çàìå÷àòåëüíîãî ðåñóðñà ÿâëÿåòñÿ òî,
÷òî îí íà àíãëèéñêîì ÿçûêå :-) Íî âàì âñå ðàâíî ïðèäåòñÿ èíîãäà
ïîëüçîâàòüñÿ èì, äàæå åñëè âû íå çíàåòå àíãëèéñêîãî ÿçûêà - õîòÿ áû
äëÿ òîãî, ÷òîáû ñêà÷àòü ñåáå íîâóþ âåðñèþ PHP :-)
Íåîáõîäèìî çàìåòèòü, ÷òî PHP Manual, ÿâëÿþùèéñÿ îôèöèàëüíîé äîêóìåíòàöèåé
ÿçûêà PHP - ýòî èìåííî òîò äîêóìåíò, ê êîòîðîìó ñëåäóåò
îáðàùàòüñÿ ïðè âîçíèêíîâåíèè êàêèõ-ëèáî âîïðîñîâ. Î÷åíü õîðîøî, åñëè
âû áóäåòå èìåòü åãî ó ñåáÿ íà ëîêàëüíîì äèñêå è ñêà÷èâàòü íîâóþ
âåðñèþ äîêóìåíòàöèè âìåñòå ñ êàæäîé íîâîé âåðñèåé PHP. Òîëüêî
òàê ìîæíî ÷óâñòâîâàòü ñåáÿ â âñåãäà â êóðñå ïîñëåäíèõ èçìåíåíèé â
ÿçûêå, êîòîðûì âû ïîëüçóåòåñü.
Åùå îäèí çàìå÷àòåëüíûå ðåñóðñ, ïîñâÿùåííûé PHP - PHP Builder.
Ýòîò ðåñóðñ ñîäåðæèò ïðîñòî ìîðå èíôîðìàöèè: ñòàòüè, ôîðóìû è ò.ï.
Ïðîñòî êëàäåçü èíôîðìàöèè äëÿ ëþáîãî, êòî õî÷åò óçíàòü ÷òî-íèáóäü
íîâîå î PHP è... âëàäååò àíãëèéñêèì ÿçûêîì :-) Ê ñîæàëåíèþ
ðóññêîÿçû÷íîãî ðåñóðñà ïîäîáíîãî óðîâíÿ ïîêà íåò (èëè ìíå íå óäàëîñü
åãî íàéòè), ïîýòîìó ïðèâåäó ëèøü ïàðó ññûëîê íà òå ðåñóðñû ïî
PHP, êîòîðûå ñîäåðæàò äåéñòâèòåëüíî ïîëåçíóþ èíôîðìàöèþ:
- Êëóá
ðàçðàáîò÷èêîâ PHP - ñîäåðæèò ìíîæåñòâî ïîëåçíîé èíôîðìàöèè î
PHP, íîâîñòè, ñòàòüè, ññûëêè è ò.ï.
- PHP ïî-ðóññêè -
äîñòàòî÷íî ìíîãî ðàçëè÷íûõ ñòàòåé î PHP, ôîðóìû, ññûëêè, è
ò.ï.
Ýòî òî, ÷òî êàñàåòñÿ îáùåé èíôîðìàöèè î PHP. Â îòñóòñòâèå
äèñòðèáóòèâà PHP îíà íå ñëèøêîì ïîëåçíà. Öåíòðîì
ðàñïðîñòðàíåíèÿ äèñòðèáóòèâîâ ÿâëÿåòñÿ îôèöèàëüíûé ñàéò. Â ðàçäåëå
downloads âû âñåãäà ìîæåòå ñêà÷àòü ïîñëåäíþþ
îôèöèàëüíóþ âåðñèþ êàê â âèäå èñõîäíûõ òåêñòîâ (à PHP
ðàñïðîñòðàíÿåòñÿ èìåííî â âèäå èñõîäíûõ òåêñòîâ), ÷òî íåîáõîäèìî äëÿ
ïîëüçîâàòåëåé Unix, òàê è â âèäå ãîòîâîãî ê èñïîëüçîâàíèþ
ïðîäóêòà äëÿ Windows. Òàì æå ìîæíî ñêà÷àòü è íåñêîëüêî áîëåå
ðàííèõ âåðñèé, õîòÿ, êàê ïðàâèëî, ýòî íå íóæíî, ò.ê. îôèöèàëüíûå
âåðñèè PHP (â îòëè÷èå îò âåðñèé äëÿ ðàçðàáîò÷èêîâ) äîñòàòî÷íî
ñòàáèëüíû â ðàáîòå. Êðîìå ýòîãî äëÿ ïîëüçîâàòåëåé Windows ÿ
õîòåë áû ïîñîâåòîâàòü åùå îäèí î÷åíü õîðîøèé ðåñóðñ, ïðåäîñòàâëÿþùèé
äèñòðèáóòèâû PHP, ñîáðàííûå èìåííî äëÿ ýòîé îïåðàöèîííîé
ñèñòåìû. Ýòî www.php4win.de. Îòëè÷èå ýòèõ äèñòðèáóòèâîâ
êàê ïðàâèëî â òîì, ÷òî îíè áîëåå ïîëíûå, ò.å. ñîäåðæàò áîëüøåå
êîëè÷åñòâî ðàñøèðåíèé PHP â ãîòîâîì äëÿ èñïîëüçîâàíèÿ âèäå,
ò.ê. äèñòðèáóòèâû ñ îôèöèàëüíîãî ñàéòà êàê ïðàâèëî ñîäåðæàò ëèøü
îñíîâíîé íàáîð ðàñøèðåíèé.
Êðîìå òîãî íå ñëåäóåò çàáûâàòü, ÷òî ðàáîòà íàä PHP
ïðîäîëæàåòñÿ ïîñòîÿííî, ïîÿâëÿþòñÿ íîâûå âîçìîæíîñòè, ôóíêöèè,
ìîäóëè è ò.ï. À îôèöèàëüíûå âåðñèè ÿçûêà ìåæäó òåì âûõîäÿò ëèøü ðàç
â íåñêîëüêî ìåñÿöåâ. ×òî äåëàòü, åñëè î÷åíü õî÷åòñÿ "ïîùóïàòü" íîâóþ
âåðñèþ PHP åùå äî âûõîäà îôèöèàëüíîãî ðåëèçà? Îòâåò îäèí -
ñêà÷àòü ò.í. "äåâåëîïåðñêóþ" âåðñèþ PHP. Ýòè âåðñèè
ñîáèðàþòñÿ àâòîìàòè÷åñêè êàæäûé äåíü èç ñàìûõ ïîñëåäíèõ âåðñèé
èñõîäíûõ òåêñòîâ PHP. Îäíàêî íåëüçÿ çàáûâàòü, ÷òî äëÿ ýòèõ
âåðñèé (â îòëè÷èå îò îôèöèàëüíîãî ðåëèçà) íèêòî íå ìîæåò
ãàðàíòèðîâàòü âàì äàæå òî, ÷òî ñêà÷àííûé âàìè äèñòðèáóòèâ õîòÿ áû
áóäåò çàïóñêàòüñÿ, íå ãîâîðÿ óæå î òîì, ÷òîáû íîðìàëüíî ðàáîòàòü.
Ýòè âåðñèè ïðåäíàçíà÷åíû â ïåðâóþ î÷åðåäü äëÿ ðàçðàáîò÷èêîâ ÿçûêà è
áåòà-òåñòåðîâ. Íî åñëè âàì âñå ðàâíî èíòåðåñíî ïîïðîáîâàòü, òî
çàãëÿíèòå ñþäà: snaps.php.net
Ñèíòàêñèñ PHP
Êàê óæå áûëî ñêàçàíî ðàíåå - ñèíòàêñèñ PHP âî ìíîãîì
çàèìñòâîâàí èç òàêèõ ÿçûêîâ êàê C, Java è Perl.
Ïîýòîìó, åñëè âû çíàêîìû õîòÿ áû ñ îäíèì èç íèõ - âàì íå ñîñòàâèò
îñîáîãî òðóäà ïðîñòî ñåñòü è íà÷àòü ïèñàòü ïðîãðàììû íà PHP.
Åñòü ó íàñ ñòàòüÿ Ñèíòàêñèñ ÿçûêà php. Çäåñü ñàìûå îñíîâû ðàññìîòåíû.
Çäåñü ìû íå áóäåì ïîäðîáíî îñòàíàâëèâàòüñÿ íà îïèñàíèè ñèíòàêñèñà -
îí õîðîøî îïèñàí â PHP Manual. Îäíàêî ìíå õîòåëîñü áû îñòàíîâèòüñÿ íà
íåêîòîðûõ àñïåêòàõ, êîòîðûå îòëè÷àþò PHP îò äðóãèõ ÿçûêîâ.
Èìåíà ïåðåìåííûõ
Ëþáàÿ ïåðåìåííàÿ â PHP èìååò èìÿ, íà÷èíàþùååñÿ ñî çíàêà
$, íàïðèìåð $variable. Ëþäÿì, ïðèâûêøèõ ê
C/C++-ïîäîáíûì ÿçûêàì ýòîò ïðèíöèï èìåíîâàíèÿ ïåðåìåííûõ
ìîæåò ïîêàçàòüñÿ ñòðàííûì, íî íà ñàìîì äåëå òàêîé ïîäõîä èìååò
îïðåäåëåííûå ïðåèìóùåñòâà.
- Ïðè òàêîì ñïîñîáå ôîðìèðîâàíèÿ èìåí ïåðåìåííûõ èõ î÷åíü ëåãêî
îòëè÷èòü îò îñòàëüíîãî êîäà. Åñëè â äðóãèõ ÿçûêàõ èíîãäà ìîæåò
âîçíèêàòü ïóòàíèöà ñ òåì, ÷òî ïðè ïåðâîì âçãëÿäå íà êîä íå âñåãäà
ÿñíî - ãäå çäåñü ïåðåìåííûå, à ãäå ôóíêöèè, òî â PHP ýòîò
âîïðîñ äàæå íå âñòàåò.
- Äàííûé ïðèíöèï ïîçâîëÿåò î÷åíü ïðîñòî è ýëåãàíòíî ðåàëèçîâàòü
ôóíêöèîíàëüíîñòü, ïðîñòî íåäîñòóïíóþ èíà÷å. Íàïðèìåð, ññûëêà íà
ïåðåìåííóþ ïî åå èìåíè, õðàíÿùåìóñÿ â äðóãîé ïåðåìåííîé:
$name = 'value';
$value = 5;
echo $$name;
 äàííîì ïðèìåðå PHP âûâåäåò ðåçóëüòàò 5. Òàêèå
ôîêóñû ñòàëè âîçìîæíû èç-çà çàëîæåííîãî â PHP ïðèíöèïà:
"anything is an expression" (ëþáàÿ âåùü ÿâëÿåòñÿ âûðàæåíèåì).
Èñõîäÿ èç ýòîãî PHP âîñïðèíèìàåò âûðàæåíèå
$$name ñëåäóþùèì îáðàçîì:
- ïàðñåð âñòðå÷àåò ñèìâîë $, à ýòî çíà÷èò, ÷òî ñëåäóþùåå
âûðàæåíèå ÿâëÿåòñÿ èìåíåì ïåðåìåííîé
- ïàðñåð âñòðå÷àåò åùå îäèí ñèìâîë $, è ïðîäîëæàåò ïîèñêè
èìåíè óæå äðóãîé ïåðåìåííîé, çíà÷åíèå êîòîðîé íåîáõîäèìî äëÿ
âû÷èñëåíèÿ çíà÷åíèÿ ïðåäûäóùåãî âûðàæåíèÿ.
- ïàðñåð ïîëó÷àåò èìÿ name, íàõîäèò ïåðåìåííóþ ñ òàêèì
èìåíåì, áåðåò åå çíà÷åíèå ('value') è âîçâðàùàåòñÿ íàçàä.
- ïîñêîëüêó íà ïðåäûäóùåì øàãå ìû èñêàëè èìÿ ïåðåìåííîé, òî
çíà÷åíèå òîëüêî ÷òî âû÷èñëåííîãî âûðàæåíèÿ âîñïðèíèìàåòñÿ èìåííî
êàê èìÿ ïåðåìåííîé. Ïàðñåð èùåò ïåðåìåííóþ ñ òàêèì èìåíåì
(value) è âîçâðàùàåò åå ðåçóëüòàò (5).
Êàê âèäèòå, ýòî î÷åíü ãèáêàÿ ñèñòåìà è ïðè íåáîëüøîé òðåíèðîâêå
âû ñìîæåòå ïðîñòî òâîðèòü ÷óäåñà ñ åå ïîìîùüþ! Âåäü òî÷íî òàê æå
ìîæíî îïåðèðîâàòü ñ ëþáûìè ýëåìåíòàìè ÿçûêà, èìåþùèìè èìÿ, ò.å.
íàïðèìåð âûçûâàòü ìåòîä êëàññà ïî åãî èìåíè, ñîäåðæàùåìóñÿ â
ïåðåìåííîé (î êëàññàõ â PHP ìû ïîãîâîðèì â îäíîé èç ñëåäóþùèõ
ïóáëèêàöèé).
Ñòðîêè php
Âîçìîæíîñòü îäíîçíà÷íî èäåíòèôèöèðîâàòü ïåðåìåííóþ ïîçâîëèëà
ñîçäàòåëÿì PHP äàòü âîçìîæíîñòü ïðîãðàììèñòàì èñïîëüçîâàòü
ïåðåìåííûå íåïîñðåäñòâåííî âíóòðè ñòðîê! Ïðèìåð ïîäîáíîãî
èñïîëüçîâàíèÿ:
$name = 'John';
$age = 23;
echo "$name is $age years old";
 êà÷åñòâå ðåçóëüòàòà ìû ïîëó÷èì ñòðîêó: John is 23 years
old. Íå ïðàâäà ëè, ýòî èñêëþ÷èòåëüíî óäîáíî? Îäíàêî íåîáõîäèìî
îáðàòèòü âàøå âíèìàíèå íà îäíó äåòàëü - â PHP, â îòëè÷èå îò
ìíîãèõ äðóãèõ ÿçûêîâ, ðàçëè÷àþòñÿ ñòðîêè, çàêëþ÷åííûå â îäèíàðíûå è
äâîéíûå êàâû÷êè. È ïîäîáíîå çàìåùåíèå èìåí ïåðåìåííûõ èõ çíà÷åíèÿìè
ïðîèçâîäèòñÿ òîëüêî â ñòðîêàõ, çàêëþ÷åííûõ â äâîéíûå êàâû÷êè!
Î÷åíü âàæíî âñåãäà ïîìíèòü îá ýòîì, äàáû èçáåæàòü îøèáîê.
Ñòðîêè, çàêëþ÷åííûå â äâîéíûå êàâû÷êè ìîãóò ñîäåðæàòü è áîëåå
ñëîæíûå âûðàæåíèÿ. Äëÿ ýòîãî íåîáõîäèìî çàêëþ÷èòü èõ â ôèãóðíûå
ñêîáêè:
$man = array('John',23);
echo "{$man[0]} is {$man[1]} years old";
Ðåçóëüòàò áóäåò òàêèì æå, êàê è â ïðåäûäóùåì ïðèìåðå.
Åùå îäíîé èíòåðåñíîé îñîáåííîñòüþ ðàáîòû PHP ñî ñòðîêàìè
ÿâëÿåòñÿ ïîääåðæêà ò.í. here docs. Íèæå ïðèâåäåí ïðèìåð:
$str = <<<TEXT
There can be any text
which will be stored
into a string
right in the same way
as it
typed here
TEXT;
 ýòîì ñëó÷àå çíà÷åíèåì ïåðåìåííîé áóäåò âåñü òåêñò, ñîäåðæàùèéñÿ
ìåæäó íà÷àëüíûì è êîíå÷íûì ìàðêåðàìè (â äàííîì ñëó÷àå ýòî ñòðîêà
TEXT, íî ýòîò ìàðêåð ìîæåò áûòü ëþáîé ïîñëåäîâàòåëüíîñòüþ
ñèìâîëîâ). Ïðèçíàêîì òîãî, ÷òî ýòî here doc, ÿâëÿåòñÿ íàëè÷èå
<<< íåïîñðåäñòâåííî ïîñëå çíàêà ïðèñâàèâàíèÿ. Äàííûé
ìåõàíèçì î÷åíü óäîáåí â ñëó÷àå, åñëè ñòðîêå íåîáõîäèìî ïðèñâîèòü
êàêîé-òî ñëîæíûé òåêñò, îñîáåííî, åñëè íåîáõîäèìî ñîõðàíèòü åãî
ôîðìàòèðîâàíèå. Êñòàòè, â ñëó÷àå èñïîëüçîâàíèÿ here docs âû
òàêæå èìååòå âîçìîæíîñòü èñïîëüçîâàíèÿ ïåðåìåííûõ âíóòðè ñòðîêè êàê
ýòî áûëî îïèñàíî ðàíåå.
Ìàññèâû
Ìàññèâû â PHP - ýòî î÷åíü ìîùíûé è ãèáêèé ìåõàíèçì. Îí
ïîçâîëèò âàì ñäåëàòü ïðàêòè÷åñêè âñå, ÷òî âû òîëüêî ìîæåòå ïîæåëàòü
ñäåëàòü ñ ìàññèâàìè. Ïîääåðæèâàþòñÿ êàê îáû÷íûå, òàê è àññîöèàòèâíûå
ìàññèâû, ïðè÷åì îíè ìîãóò áûòü ñìåøàíû â ëþáîì ïîðÿäêå äàæå â
ïðåäåëàõ îäíîãî ìàññèâà. Ïîääåðæèâàþòñÿ âëîæåííûå ìàññèâû, èõ
âëîæåííîñòü íèêàê ÿâíî íå îãðàíè÷åíà.  PHP ñóùåñòâóåò
áîëüøîå êîëè÷åñòâî ôóíêöèé äëÿ ðàáîòû ñ ìàññèâàìè, îíè ïîìîãóò âàì
âûïîëíèòü áîëüøèíñòâî íåîáõîäèìûõ îïåðàöèé áåç ëèøíèõ çàòðàò âðåìåíè
è ñèë.
Êðîìå òîãî, íåîáõîäèìî îòìåòèòü åùå îäíó îñîáåííîñòü PHP
ïðè ðàáîòå ñ ìàññèâàìè: â îòëè÷èå îò äðóãèõ ÿçûêîâ PHP
ïîçâîëÿåò çàäàâàòü ìàññèâû ïðàêòè÷åñêè ëþáîé ñëîæíîñòè
íåïîñðåäñòâåííî â òåëå ïðîãðàììû! Âîçìîæíî ñ ïåðâîãî âçãëÿäà ýòà
âîçìîæíîñòü íå ïîêàæåòñÿ âàì òàêîé óæ âàæíîé, îäíàêî ýòî íå òàê. Â
âàøåé ïðàêòèêå âàì íå ðàç ïðèäåòñÿ ñòîëêíóòüñÿ ñ íåîáõîäèìîñòüþ
îïèñàíèÿ êàêîé-íèáóäü ñëîæíîé ñòðóêòóðû äàííûõ è íàïîëíåíèåì ýòîé
ñòðóêòóðû äàííûìè. Â äðóãèõ ÿçûêàõ äëÿ ýòîãî êàê ïðàâèëî ïðèõîäèòñÿ
ïèñàòü äîïîëíèòåëüíûé êîä, ÷òî íå âñåãäà óäîáíî. Â PHP æå âû
ìîæåòå ñäåëàòü ýòî î÷åíü ïðîñòî è ýëåãàíòíî:
$data = array(1,10,100,1000, // ×èñëåííûå äàííûå
'Some text','Another text', // Ñòðîêîâûå äàííûå
'name'=>'John','age'=>23, // Àññîöèàòèâíûå ñâÿçè â ìàññèâå
'date'=>array('day'=>10,'month'=>'may','year'=>2001)); //Âëîæåííûé ìàññèâ
Êàê âèäèòå - ðàçëè÷íûå äàííûå ìîãóò áûòü ñîâìåùåíû âìåñòå â
åäèíîé ñòðóêòóðå áåç êàêèõ-ëèáî ïðîáëåì! Ïîñìîòðèì, êàê ìîæíî
îáðàòèòüñÿ ê ýòèì äàííûì:
echo $data[1]; // Ðåçóëüòàò - 10
echo $data[5]; // Ðåçóëüòàò - 'Another text'
echo $data['age']; // Ðåçóëüòàò - 23
echo $data['date']['month']; // Ðåçóëüòàò - 'may'
Variable scope
Àíãëèéñêèé òåðìèí, âûíåñåííûé â çàãîëîâîê ïåðåâîäèòñÿ íà ðóññêèé
êàê "îáëàñòü âèäèìîñòè ïåðåìåííîé", íî â îðèãèíàëå ýòîò òåðìèí
íàìíîãî ïîíÿòíåå :-)
Ïîä ýòèì òåðìèíîì ïîäðàçóìåâàåòñÿ òî, ÷òî ëþáàÿ ïåðåìåííàÿ,
îïèñàííàÿ â ïðîãðàììå èìååò ñâîþ îáëàñòü âèäèìîñòè, äðóãèìè ñëîâàìè
åñëè ïåðåìåííàÿ îïèñàíà â êàêîì-òî ìåñòå ïðîãðàììû, òî ýòî îòíþäü íå
îçíà÷àåò, ÷òî îíà àâòîìàòè÷åñêè ñòàíîâèòñÿ âèäèìîé â ëþáîì äðóãîì
ìåñòå ýòîé ïðîãðàììû.
 PHP íà ýòîò ñ÷åò åñòü ñâîè îñîáåííîñòè. Ñàìàÿ "ñòðàííàÿ"
âåùü, ñ êîòîðîé ñòàëêèâàåòñÿ ÷åëîâåê ïðè çíàêîìñòâå ñ PHP ýòî
òî, ÷òî ïåðåìåííàÿ, îïèñàííàÿ âíå ôóíêöèè íåâèäèìà âíóòðè
íåå! Â äðóãèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ ìû ïðèâûêëè ê òîìó, ÷òî
ãëîáàëüíûå ïåðåìåííûå ïðîãðàììû âèäíû âåçäå, íî â PHP ýòî íå
òàê. Íî ïîñìîòðåâ íà ýòó "ñòðàííîñòü" ïîâíèìàòåëüíåå ìîæíî çàìåòèòü,
÷òî îíà èìååò áîëüøå âûãîäû, íåæåëè íåóäîáñòâ, ò.ê. ÿâëÿåòñÿ ñâîåãî
ðîäà "çàùèòíûì ìåõàíèçìîì", êîòîðûé íå ïîçâîëèò âàì ñëó÷àéíî
ïåðåïóòàòü ëîêàëüíóþ è ãëîáàëüíóþ ïåðåìåííóþ, ÷òî ïîä÷àñ ïðèâîäèò ê
î÷åíü òÿæåëûì ïîñëåäñòâèÿì.
Êàê æå ïîëó÷èòü äîñòóï ê ãëîáàëüíûì ïåðåìåííûì èç ôóíêöèè? Åñòü 2
ñïîñîáà ñäåëàòü ýòî:
- Èñïîëüçîâàòü ãëîáàëüíûé àññîöèàòèâíûé ìàññèâ $GLOBALS.
Ýòî åäèíñòâåííàÿ ïåðåìåííàÿ â PHP, êîòîðàÿ âèäíà îòîâñþäó è
êîòîðàÿ "ñîäåðæèò" â ñåáå âñå ãëîáàëüíûå ïåðåìåííûå, èìåþùèåñÿ â
ïðîãðàììå. Ò.î. åñëè âû âíóòðè ôóíêöèè îáðàùàåòåñü ê ïåðåìåííîé
$variable - òî âû îáðàùàåòåñü ê ëîêàëüíîé ïåðåìåííîé, à
åñëè $GLOBALS['variable'] - òî ê ãëîáàëüíîé.
function myFunction() {
$variable = 5; // Ïðèñâàèâàåì çíà÷åíèå ëîêàëüíîé ïåðåìåííîé
$GLOBALS['variable'] = 10; // Ïðèñâàèâàåì çíà÷åíèå ãëîáàëüíîé ïåðåìåííîé
};
- Èñïîëüçîâàòü êëþ÷åâîå ñëîâî global. Îíî ïîçâîëèò âàì
çàäàòü ñïèñîê ãëîáàëüíûõ ïåðåìåííûõ, êîòîðûå áóäóò âèäèìû âíóòðè
ôóíêöèè:
function myFunction() {
global $variable;
$variable = 10; // Ïðèñâàèâàåì çíà÷åíèå ãëîáàëüíîé ïåðåìåííîé
};
×òî äàëüøå?
Íà ýòîì ìû ïîêà îñòàíîâèìñÿ. Ñèíòàêñèñ PHP ñîäåðæèò
ìíîæåñòâî èíòåðåñíûõ ðåøåíèé, çäåñü ìû ðàññìîòðåëè ëèøü íåêîòîðûå èç
íèõ. Âîçìîæíî ìû ïîñâÿòèì åùå îäèí âûïóñê ðàññêàçó î ñèíòàêñèñå
ýòîãî ÿçûêà, à çàòåì ïåðåéäåì ê áîëåå ñëîæíûì è èíòåðåñíûì âåùàì.
Èòàê, ÷òî âàñ îæèäàåò â äàëüíåéøåì?
- Ðàáîòà ñ ìàññèâàìè
- Ðàáîòà ñ îáúåêòàìè
- Ðàáîòà ñî ññûëêàìè
- Ðàáîòà ñ ñåññèÿìè
- Îáðàáîòêà äàííûõ ôîðì, upload ôàéëîâ è ò.ï.
- Regular expressions
- Ðàáîòà ñ áàçàìè äàííûõ
- Ðàáîòà ñ XML/XSLT
- ×òî-òî åùå? Ñïðàøèâàéòå íà ôîðóìå!
Êîíå÷íî, ìàòåðèàë íå îáÿçàòåëüíî áóäåò èäòè èìåííî â òàêîé
ïîñëåäîâàòåëüíîñòè, çäåñü ìíîãîå çàâèñèò îò âàñ è îò âàøåé ðåàêöèè
íà íàøè ñòàòüè. Åñëè âû õîòèòå óçíàòü ÷òî-òî, åñëè ó âàñ åñòü âîïðîñ
èëè ïðîáëåìà è âû íå çíàåòå îòâåòà íà íèõ - ïèøèòå, ñïðàøèâàéòå, ìû
ïîñòàðàåìñÿ âàì ïîìî÷ü!