Çíàêîìñòâî ñ PHP.



Çíàêîìñòâî ñ PHP 2002-07-04
Àâòîð: Àëåêñàíäð Ãðèìàëîâñêèé Ñòðàíèöû: [1]

Ââåäåíèå â èçó÷åíèå ÿçûêà php

Çäðàâñòâóéòå! Ñ ñåãîäíÿøíåãî äíÿ ìû íà÷èíàåì ñåðèþ ïóáëèêàöèé î ïðîãðàììèðîâàíèè íà PHP.  ýòîé ñòàòüå ìû äàäèì êðàòêóþ ââîäíóþ è ïîñâÿòèì âàñ â ïëàíû íà áóäóùåå. Ïîñêîëüêó â èíòåðíåòå óæå ñóùåñòâóåò äîñòàòî÷íîå êîëè÷åñòâî ñàéòîâ î PHP, ïóáëèêóþùèõ ìàòåðèàëû, ðàññ÷èòàííûå íà íîâè÷êîâ, ìû ïðèíÿëè ðåøåíèå â îñíîâíîì îðèåíòèðîâàòüñÿ íà ëþäåé, óæå íåñêîëüêî ðàçáèðàþùèõñÿ â PHP-ïðîãðàììèðîâàíèè. Ýòî íåîáõîäèìî äëÿ òîãî, ÷òîáû ïîíèìàòü ïðèìåðû êîäà, êîòîðûå áóäóò ïðèâîäèòüñÿ â äàëüíåéøåì.

Òåì íå ìåíåå, íåñìîòðÿ íà ïðåäïîëàãàåìóþ ïîäãîòîâëåííîñòü ÷èòàòåëÿ, â ïåðâîé ñòàòüå ìû äàäèì êðàòêèé îáçîð ïî PHP âîîáùå - ÷òî îí èç ñåáÿ ïðåäñòàâëÿåò, êàêèå çàäà÷è ñ åãî ïîìîùüþ ñëåäóåò ðåøàòü, íåêîòîðûå îñîáåííîñòè ñèíòàêñèñà, è ò.ï.

×òî òàêîå PHP?

PHP (åãî ïîëíîå íàçâàíèå: PHP: Hypertext Preprocessor) - ýòî ÿçûê, ïðåäíàçíà÷åííûé äëÿ áûñòðîãî ñîçäàíèÿ äèíàìè÷åñêèõ web-ñòðàíèö. Ñèíòàêñèñ ÿçûêà ïîõîæ íà Ñ, Java è Perl, îäíàêî èìååò è ñâîè, ïðèñóùèå òîëüêî åìó îñîáåííîñòè.  îôèöèàëüíîé äîêóìåíòàöèè PHP îïðåäåëÿåòñÿ êàê server-side HTML-embedded scripting language (âñòðàèâàåìûé â HTML ñêðèïòîâûé ÿçûê ñ îáðàáîòêîé íà ñåðâåðå). Èç ýòîãî îïðåäåëåíèÿ ìîæíî âûäåëèòü äâà îñíîâíûõ ìîìåíòà:

  1. Îáðàáîòêà êîäà PHP ïðîèçâîäèòñÿ íà ñåðâåðå, à íå â áðàóçåðå êëèåíòà, êàê, íàïðèìåð JavaScript
  2. Êîä 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++-ïîäîáíûì ÿçûêàì ýòîò ïðèíöèï èìåíîâàíèÿ ïåðåìåííûõ ìîæåò ïîêàçàòüñÿ ñòðàííûì, íî íà ñàìîì äåëå òàêîé ïîäõîä èìååò îïðåäåëåííûå ïðåèìóùåñòâà.

  1. Ïðè òàêîì ñïîñîáå ôîðìèðîâàíèÿ èìåí ïåðåìåííûõ èõ î÷åíü ëåãêî îòëè÷èòü îò îñòàëüíîãî êîäà. Åñëè â äðóãèõ ÿçûêàõ èíîãäà ìîæåò âîçíèêàòü ïóòàíèöà ñ òåì, ÷òî ïðè ïåðâîì âçãëÿäå íà êîä íå âñåãäà ÿñíî - ãäå çäåñü ïåðåìåííûå, à ãäå ôóíêöèè, òî â PHP ýòîò âîïðîñ äàæå íå âñòàåò.
  2. Äàííûé ïðèíöèï ïîçâîëÿåò î÷åíü ïðîñòî è ýëåãàíòíî ðåàëèçîâàòü ôóíêöèîíàëüíîñòü, ïðîñòî íåäîñòóïíóþ èíà÷å. Íàïðèìåð, ññûëêà íà ïåðåìåííóþ ïî åå èìåíè, õðàíÿùåìóñÿ â äðóãîé ïåðåìåííîé:
 $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 ñïîñîáà ñäåëàòü ýòî:

  1. Èñïîëüçîâàòü ãëîáàëüíûé àññîöèàòèâíûé ìàññèâ $GLOBALS. Ýòî åäèíñòâåííàÿ ïåðåìåííàÿ â PHP, êîòîðàÿ âèäíà îòîâñþäó è êîòîðàÿ "ñîäåðæèò" â ñåáå âñå ãëîáàëüíûå ïåðåìåííûå, èìåþùèåñÿ â ïðîãðàììå. Ò.î. åñëè âû âíóòðè ôóíêöèè îáðàùàåòåñü ê ïåðåìåííîé $variable - òî âû îáðàùàåòåñü ê ëîêàëüíîé ïåðåìåííîé, à åñëè $GLOBALS['variable'] - òî ê ãëîáàëüíîé.
 function myFunction() {

 $variable = 5; // Ïðèñâàèâàåì çíà÷åíèå ëîêàëüíîé ïåðåìåííîé

 $GLOBALS['variable'] = 10; // Ïðèñâàèâàåì çíà÷åíèå ãëîáàëüíîé ïåðåìåííîé

 };

  1. Èñïîëüçîâàòü êëþ÷åâîå ñëîâî global. Îíî ïîçâîëèò âàì çàäàòü ñïèñîê ãëîáàëüíûõ ïåðåìåííûõ, êîòîðûå áóäóò âèäèìû âíóòðè ôóíêöèè:
 function myFunction() {

 global $variable;

 $variable = 10; // Ïðèñâàèâàåì çíà÷åíèå ãëîáàëüíîé ïåðåìåííîé

 };

×òî äàëüøå?


Íà ýòîì ìû ïîêà îñòàíîâèìñÿ. Ñèíòàêñèñ PHP ñîäåðæèò ìíîæåñòâî èíòåðåñíûõ ðåøåíèé, çäåñü ìû ðàññìîòðåëè ëèøü íåêîòîðûå èç íèõ. Âîçìîæíî ìû ïîñâÿòèì åùå îäèí âûïóñê ðàññêàçó î ñèíòàêñèñå ýòîãî ÿçûêà, à çàòåì ïåðåéäåì ê áîëåå ñëîæíûì è èíòåðåñíûì âåùàì. Èòàê, ÷òî âàñ îæèäàåò â äàëüíåéøåì?

  • Ðàáîòà ñ ìàññèâàìè
  • Ðàáîòà ñ îáúåêòàìè
  • Ðàáîòà ñî ññûëêàìè
  • Ðàáîòà ñ ñåññèÿìè
  • Îáðàáîòêà äàííûõ ôîðì, upload ôàéëîâ è ò.ï.
  • Regular expressions
  • Ðàáîòà ñ áàçàìè äàííûõ
  • Ðàáîòà ñ XML/XSLT
  • ×òî-òî åùå? Ñïðàøèâàéòå íà ôîðóìå!

Êîíå÷íî, ìàòåðèàë íå îáÿçàòåëüíî áóäåò èäòè èìåííî â òàêîé ïîñëåäîâàòåëüíîñòè, çäåñü ìíîãîå çàâèñèò îò âàñ è îò âàøåé ðåàêöèè íà íàøè ñòàòüè. Åñëè âû õîòèòå óçíàòü ÷òî-òî, åñëè ó âàñ åñòü âîïðîñ èëè ïðîáëåìà è âû íå çíàåòå îòâåòà íà íèõ - ïèøèòå, ñïðàøèâàéòå, ìû ïîñòàðàåìñÿ âàì ïîìî÷ü!



Àâòîð: Àëåêñàíäð Ãðèìàëîâñêèé




Ïðè ïåðåïå÷àòêå èíôîðìàöèè äåëàéòå, ïîæàëóéñòà, ññûëêó íà íàø ñàéò (ëèáî ïîäåëèòüñÿ âêîíòàêòå, ãóãë+ èëè äåëèòåñü â îäíîêëàññíèêàõ ñòàòü¸é). Ñïàñèáî!

Èñòî÷íèê: www.wr-script.ru©, 2004-2026ã.

Äåëèòåñü ñ äðóçüÿìè â ñîöñåòÿõ. Àêòèâíûå êîììåíòàòîðû ïîëó÷àþò ñâåæèå ñêðèïòû è áåñïëàòíûå äîðàáîòêè îò WR-Script.ru!

Âåðíóòüñÿ ê ñòàòüÿì ïîìîùè WEB-ìàñòåðó

WR-Счётчик