HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ PHP: Ïåðåìåííûå è êîíñòàíòû

PHP äëÿ "÷àéíèêîâ"

Èíñòðóìåíòû
Âûáèðàåì IDE
Âûáèðàåì Web-ñåðâåð
Âûáèðàåì ÑÓÁÄ
Ñòðóêòóðà ÿçûêà PHP
Ïåðâûé øàã
Ñèíòàêñèñ
Òèïû äàííûõ
Ïåðåìåííûå è êîíñòàíòû
Îïåðàòîðû
Âûðàæåíèÿ
Óïðàâëÿþùèå ñòðóêòóðû
Ôóíêöèè
Êëàññû
Èñêëþ÷åíèÿ
Îøèáêè
Ìàññèâû
Ãëîáàëüíûå ìàññèâû
Cookies
Ñåññèè
Çàãðóçêà ôàéëîâ
Ðàáîòà ñ ôàéëàìè
Ðàáîòà ñ ôàéëàìè íà äèñêå
Ðàáîòà ñ äàííûìè â ôàéëå
Ïðèìåð óïðàâëåíèÿ ôàéëàìè
Ðàáîòà ñ áàçàìè äàííûõ
Ïîäêëþ÷åíèå
Àíàëèç ðåçóëüòàòîâ
Âûïîëíåíèå çàïðîñîâ
Îòêëþ÷åíèå
Ïðèìåð: îòñëåæèâàíèå ïîëüçîâàòåëåé
Ðàáîòà â ñåòè
Îòïðàâêà ïî÷òû
Áåçîïàñíîñòü
HTTP-àóòåíòèôèêàöèÿ
Çàùèòà ëîãèíîì è ïàðîëåì
Àâòîìàòèçàöèÿ
Ðåãóëÿðíûå âûðàæåíèÿ â PHP
Èíòåãðàöèÿ
PHP è JavaScript



PHP: Ïåðåìåííûå è êîíñòàíòû


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷
ICQ: 438856621
email: _spin_@bk.ru

Ïåðåìåííàÿ - ýòî íåêàÿ ñóùíîñòü, ñîäåðæàùàÿ äàííûå. Åñëè òèï äàííûõ ýòî îáùåå îïèñàíèå ôîðìàòà õðàíèìûõ äàííûõ è ñïîñîáîâ ðàáîòû ñ íèìè, òî ïåðåìåííàÿ ïðåäñòàâëÿåò ñîáîé êîíêðåòíûé áëîê ïàìÿòè êîìïüþòåðà.  ýòîì áëîêå õðàíèòñÿ çíà÷åíèå ïåðåìåííîé, à îáðàòèòüñÿ ê áëîêó (è ê çíà÷åíèþ) ìîæíî ïî èìåíè ïåðåìåííîé.


 PHP èìÿ ïåðåìåííîé âñåãäà íà÷èíàåòñÿ ñî çíàêà äîëëàðà ($), çà êîòîðûì îáÿçàòåëüíî äîëæíà ñëåäîâàòü áóêâà, ïîñëå êîòîðîé ìîæíî èñïîëüçîâàòü áóêâû, öèôðû è çíàê ïîä÷¸ðêèâàíèÿ. Èìåíà ÷óâñòâèòåëüíû ê ðåãèñòðó ñèìâîëîâ, ò.å. ïåðåìåííûå $value, $Value, $VALUE è $VaLuE - ÷åòûðå ÐÀÇÍÛÕ ïåðåìåííûõ, õîòÿ èõ èìÿ è ÷èòàåòñÿ îäèíàêîâî.

Ïðèìåðû ñèíòàêñè÷åñêè ïðàâèëüíûõ èì¸í ïåðåìåííûõ:

<php
    $varName
    $name_19
    $x_____________99887
    $èâàí_èâàíû÷
?>

Ïðèìåð íåêîððåêòíûõ èì¸í:

<php
    $1_name
    $_user_pass
?>

Åñòü îäíî îáùåå ïðàâèëî (äëÿ âñåõ ÿçûêîâ ïðîãðàììèðîâàíèÿ), êàñàþùååñÿ èìåíîâàíèÿ ïåðåìåííûõ. Ïðàâèëî î÷åíü ïðîñòîå: èìåíà âñåãäà äîëæíû áûòü îñìûñëåííûìè.

Ïðèìåð ïëîõî ÷èòàåìîãî êîäà

<php
    $x_1 = func1($b);
	$u1 = $x_1['param1'];
	$u2 = $x_1['param2'];
	$u3 = $x_1['param3'];
?>

Êðàòêîñòü, êîíå÷íî, ñåòñòðà òàëàíòà, íî æåðòâîâàòü ïðîñòîòîé âîñïðèÿòèÿ êîäà ðàäè åãî êîìïàêòíîñòè - íåðàçóìíî. Òåì áîëåå, ÷òî äëèíà èìåíè íèêàê íå âëèÿåò íà ïðîèçâîäèòåëüíîñü ñêðèïòà. Íî íå ñòîèò è âïàäàòü â ïðîòèâîïîëîæíóþ êðàéíîñòü - äàâàòü ïåðåìåííûì ñëèøêîì äëèííûå èìåíà. Åñëè èìÿ äîëæíî ñîñòîÿòü èç äâóõ è áîëåå ñëîâ - ÷àñòè èìåíè íóæíî âûäåëÿòü çàãëàâíûìè áóêâàìè èëè ðàçäåëÿòü ïîä÷¸ðêèâàíèÿìè. Íàïðèìåð, èìÿ $strusernameadndomain íàìíîãî ëó÷øå âîñïðèíèìàåòñÿ â âèäå $str_UserNameAndDomain.

Ïðèìåð õîðîøî ÷èòàåìîãî êîäà

<php
    $user_data = get_user_data($userInfo);
	$user_id = $user_data['user_id'];
	$user_login = $user_data['user_login'];
	$user_name = $user_data['user_name'];
?>

Ïåðåìåííûå áûâàþò äâóõ âèäîâ: îáû÷íûå ïåðåìåííûå (ïåðåìåííûå-çíà÷åíèÿ) è ññûëî÷íûå ïåðåìåííûå. Êëþ÷åâîå îòëè÷èå ìåæäó íèìè çàêëþ÷åíî â ñïîñîáå îáðàáîòêè äàííûõ. Ïðè ïðèñâîåíèè çíà÷åíèÿ îáû÷íîé ïåðåìåííîé ïðèñâàèâàåìîå çíà÷åíèå ïîëíîñòüþ êîïèðóåòñÿ, ò.å. ñîçäà¸òñÿ íîâûé áëîê ïàìÿòè, êóäà ïîìåùàåòñÿ êîïèÿ èñõîäíîãî çíà÷åíèÿ. Ïðè äàëüíåéøåé ðàáîòå âñå èçìåíåíèÿ áóäóò îòðàæàòüñÿ íà ýòîé êîïèè, à íå íà èñõîäíûõ äàííûõ.

Ññûëî÷íûå ïåðåìåííûå ðàáîòàþò èíà÷å. Ïðè ïðèñâîåíèè çíà÷åíèÿ ññûëî÷íîé ïåðåìåííîé êîïèðóþòñÿ íå äàííûå, à èíôîðìàöèÿ î òîì, ãäå îíà ëåæèò.  ðåçóëüòàòå ïîëó÷àåòñÿ, ÷òî ïåðåìåííàÿ óêàçûâàåò íà òîò æå áëîê, â êîòîðîì ëåæàò èñõîäíûå äàííûå. Òåïåðü åñëè èçìåíèòü çíà÷åíèå ññûëî÷íîé ïåðåìåííîé, òî èçìåíèòñÿ èñõîäíîå çíà÷åíèå.

Ðàññìîòðèì ïðèìåð:

Ïåðåäà÷à ïåðåìåííûõ ïî çíà÷åíèþ

<php
        // Ïðèñâîèì çíà÷åíèå 'Âàñÿ' ïåðåìåííîé $name
    $name = 'Âàñÿ';

    $ref_name = $name;
        // Òåïåðü $ref_name ðàâåí $name
        // Èçìåíèì $ref_name
    $ref_name = "Ìåíÿ çîâóò $ref_name";

    echo $ref_name;
        // $ref_name èçìåíèëàñü
    echo $name;
        // $name îñòàëàñü ïðåæíåé
?>

Ïåðåäà÷à ïåðåìåííûõ ïî ññûëêå

<php
        // Ïðèñâîèì çíà÷åíèå 'Âàñÿ' ïåðåìåííîé $name
    $name = 'Âàñÿ';
    $ref_name = &$name;
        // Òåïåðü $ref_name ññûëàåòñÿ íà $name
        // Èçìåíèì $ref_name
    $ref_name = "Ìåíÿ çîâóò $ref_name";
    echo $ref_name;
    echo $name;
        // $name èçìåíèëàñü îäèíàêîâî ñ $ref_name
?>

Ñòîèò îòìåòèòü, ÷òî ïî ññûëêå ìîæíî ïåðåäàâàòü òîëüêî ïåðåìåííûå, ò.å. ñëåäóþùèé êîä ïðèâåä¸ò ê îøèáêå:

<php
    $ref_name = &('Âàñÿ');  // íåëüçÿ, ò.ê. çíà÷åíèå 'Âàñÿ' íå ÿâëÿåòñÿ ïåðåìåííîé;
?>

Äëÿ ðàáîòû ñ ïåðåìåííûìè åñòü â PHP îñîáûå ôóíêöèè:

<php

    $name = 'Èâàí Èâàíû÷';
    if(isset($name))
    {
            // Âûâîäèì ñîîáùåíèå ñ èìåíåì
         echo "Ìî¸ èìÿ: $name";
            // óíè÷òîæàåì ïåðåìåííóþ
         unset($name);
    }
    else "Èìÿ åù¸ íå îïðåäåëåíî";

    echo $name;
        // íè÷åãî íå âûâåäåò,
        // ò.ê. çíà÷åíèå ïåðåìåííîé $name
        // åù¸ íå îïðåäåëåíî
        // èëè ïåðåìåííàÿ óæå óíè÷òîæåíà

?>

Îáëàñòü âèäèìîñòè ïåðåìåííûõ

Î÷åíü âàæíàÿ õàðàêòåðèñòèêà ïåðåìåííîé - å¸ îáëàñòü âèäèìîñòè (îáëàñòü äåéñòâèÿ), ò.å. îïèñàíèå òîãî, èç êàêèõ ìåñò ïðîãðàììû (ñêðèïòà) ìîæíî ïðî÷èòàòü èëè èçìåíèòü å¸ çíà÷åíèå. Ñëåäóåò âñåãäà ïîìíèòü, ÷òî ïåðåìåííàÿ, îáúÿâëåííàÿ âíóòðè áëîêà ïðîãðàììû, âèäíà òîëüêî â ïðåäåëàõ ýòîãî áëîêà, à äëÿ òîãî, ÷òîáû îáðàòèòüñÿ ê ïåðåìåííîé, îáúÿâëåííîé ñíàðóæè áëîêà, íåîáõîäèìî å¸ îñîáûì îáðàçîì îáúÿâèòü.

Áëîêàìè ïðîãðàììû â äàííîì ñëó÷àå ÿâëÿþòñÿ "ñêðèïò", "ôóíêöèÿ" èëè "êëàññ". Íàïðèìåð:

<php
    $name = 'Âàñÿ';
        // ïåðåìåííàÿ $name îáúÿâëåíà â áëîêå "ñêðèïò"

    // ôóíêöèÿ, äîáàâëÿþùàÿ ôàìèëèþ ê èìåíè
    function tryChengeName($family)
    {
        $fullName = $name . $family;
        echo 'Èìÿ âíóòðè ôóíêöèè: '.$fullName;
    }

    echo 'Èìÿ ÄÎ âûçîâà ôóíêöèè: '.$name;
        // ðåçóëüòàò: "Èìÿ ÄÎ âûçîâà ôóíêöèè: Âàñÿ"

    tryChengeName(' Èâàíîâ');
        // ðåçóëüòàò: ""

    echo 'Èìÿ ÏÎÑËÅ âûçîâà ôóíêöèè: '.$name;
        // ðåçóëüòàò: "Èìÿ ÏÎÑËÅ âûçîâà ôóíêöèè: Âàñÿ"
?>

Âðîäå áû âñ¸ ïðàâèëüíî, íî - íå ðàáîòàåò. Ïî÷åìó? Ïîòîìó ÷òî åñëè ÿâíî íå ñêàçàòü, ÷òî ïåðåìåííàÿ $name âíóòðè ôóíêöèè - ýòî â äåéñòâèòåëüíîñòè ãëîáàëüíàÿ ïåðåìåííàÿ $name, òî èíòåðïðåòàòîð ñîçäàòü âðåìåííóþ êîïèþ ïåðåìåííîé ñ èìåíåì $name è ïóñòûì çíà÷åíèåì. À òàê êàê çíà÷åíèå ïóñòîå (íåîïðåäåë¸ííîå), òî è ðåçóëüòàò ñëîæåíèÿ ñòðîê áóäåò íåîïðåäåë¸í (ïóñò).

Èñïðàâèòü ïîëîæåíèå î÷åíü ëåãêî, äîñòàòî÷íî äîáàâèòü âñåãî îäíó ñòðîêó (âûäåëåíà æèðíûì øðèôòîì):

<php
    $name = 'Âàñÿ';
        // ïåðåìåííàÿ $name îáúÿâëåíà â áëîêå "ñêðèïò"

    // ôóíêöèÿ, äîáàâëÿþùàÿ ôàìèëèþ ê èìåíè
    function tryChengeName($family)
    {
        global $name;
            // ÿâíî óêàçûâàåì, ÷òî íàäî
            // èñïîëüçîâàòü ãëîáàëüíóþ ïåðåìåííóþ.
        $fullName = $name . $family;
        echo 'Èìÿ âíóòðè ôóíêöèè: '.$fullName;
    }

    echo 'Èìÿ ÄÎ âûçîâà ôóíêöèè: '.$name;
        // ðåçóëüòàò: "Èìÿ ÄÎ âûçîâà ôóíêöèè: Âàñÿ"

    tryChengeName(' Èâàíîâ');
        // ðåçóëüòàò: "Èìÿ âíóòðè ôóíêöèè: Âàñÿ Èâàíîâ"

    echo 'Èìÿ ÏÎÑËÅ âûçîâà ôóíêöèè: '.$name;
        // ðåçóëüòàò: "Èìÿ ÏÎÑËÅ âûçîâà ôóíêöèè: Âàñÿ Èâàíîâ"
?>

 äàííîì ïðèìåðå ïåðåìåííàÿ $name èìååò îáëàñòü âèäèìîñòè, ðàâíóþ âñåìó ñêðèïòó, à ïåðåìåííàÿ $fullName, îáúÿâëåííàÿ âíóòðè ôóíêöèè, èìååò îáëàñòü îïðåäåëåíèÿ ðàâíóþ ýòîé ñàìîé ôóíêöèè. Ýòî çíà÷èò, ïðè âûõîäå èõ ôóíêöèè ïåðåìåííàÿ $fullName áóäåò óíè÷òîæåíà, à âñå ïîïûòêè ïðî÷èòàòü å¸ çíà÷åíèå ïðèâåäóò ê îøèáêå.

Ïðèìåðû ðàáîòû ñ êëàññàìè ìû ðàññìîòðèì â ðàçäåëå "Êëàññû è íàñëåäîâàíèå".

Ïåðåìåííûå ïåðåìåííûå

Äà-äà, çäåñü íåò îøèáêè, èìåííî òàê (äâóìÿ ñëîâàìè) íàçûâàþòñÿ íåêîòîðûå ïåðåìåííûå â PHP. Ñìûñë â òîì, ÷òî òåêñòîâàÿ ÷àñòü èìåíè ïåðåìåííîé (ò.å. èìÿ áåç çíàêà äîëëàðà) ìîæåò ñàìà áûòü èìåíåì. Íàïðèìåð:

<php
        // îáúÿâëÿåì è èíèöèàëèçèðóåì
        // ïåðåìåííóþ $varVar
    $varVar = 'Âàñÿ';
        // îáúÿâëÿåì è èíèöèàëèçèðóåì
        // ïåðåìåííóþ $$varVar, ò.å. $Âàñÿ
    $$varVar = 'Èâàíîâ';
    echo "$varVar ${$varVar}";
        // âûâåäåò Âàñÿ Èâàíîâ,
?>

Íàñòîÿòåëüíî íå ðåêîìåíäóåòñÿ ïîëüçîâàòüñÿ ïîäîáíûìè ïðè¸ìàìè áåç îñòðîé íåîáõîäèìîñòè. Êîä, íàïè÷êàíûé òàêèìè òðþêàìè, î÷åíü ñëîæíî ñîïðîâîæäàòü. Îñîáåííî ýòî âàæíî ïðè ðàáîòå ñ äàííûìè, ââîäèìûìè ïîëüçîâàòåëÿìè. Ãëàâíàÿ ïðè÷èíà ñëîæíîñòåé - íåÿâíûå çàâèñèìîñòè. Íàïðèìåð, ÷òî ñëó÷èòñÿ, åñëè âìåñòî èìåíè 'Âàñÿ' íàïèñàòü ÷òî-òî âðîäå "''""_;%//^q'"? Ïðàâèëüíî! Ñêðèïò â áîëüøèíñòâå ñëó÷àåâ íå ñìîæåò âûïîëíèòüñÿ! Ìîæíî, êîíå÷íî, äîáàâèòü êó÷ó ïðîâåðîê íà íàëè÷èå "íåïðàâèëüíûõ" ñèìâîëîâ, íî ïðîùå âîîáùå íå ïîëüçîâàòüñÿ òàêèìè òðþêàìè.

Êîíñòàíòû

Êîíñòàíòà - ýòî íåêàÿ íåèçìåííàÿ âåëè÷èíà. Êîíñòàíòà îáúÿâëÿåòñÿ îäíîâðåìåííî ñ èìåíåì è çíà÷åíèåì. Äëÿ îáúÿâëåíèÿ êîíñòàíòû ñëóæèò ôóíêöèÿ define(), à äëÿ îïðåäåëåíèÿ íàëè÷èÿ êîíñòàíòû (ò.å. áûëà îíà îïðåäåëåíà èëè íåò) - ôóíêöèÿ defined(). Èìÿ êîíñòàíòû ñòðîèòñÿ ïî òåì æå ïðàâèëàì, ÷òî è èìåíà ïåðåìåííûõ.

Ïðèìåðû êîíñòàíò:

<php
    // Ïðàâèëüíûå èìåíà
    define("DBServer",     "localhost");
    define("DBCatalog",    "php_online");
    define("DBUser", "root");

    // íåïðàâèëüíûå èìåíà
    define("2pass",    "userpass");

    if(defined("DBServer")) echo DBServer;
    else echo "DBServer not defined";
?>

Îòäåëüíûé âèä êîíñòàíò PHP - òàê íàçûâàåìûå "ìàãè÷åñêèå êîíñòàíòû". Ýòî ñèñòåìíûå êîíñòàíòû, çíà÷åíèå êîòîðûõ îïðåäåëÿåò è óñòàíàâëèâàåò èíòåðïðåòàòîð. Òàêèõ êîíñòàíò íåìíîãî:

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



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû