HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ Êëàññû

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

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

 

PHP: Êëàññû


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

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


Êëàññ ìîæíî ïðåäñòàâèòü êàê ôîðìàëüíîå îïèñàíèå íåêîåãî îáúåêòà, ó êîòîðîãî åñòü ñâîéñòâà è ìåòîäû. Ñâîéñòâî - ýòî êàêîå-òî çíà÷åíèå, àññîöèèðîâàííîå ñ êëàññîì, à ìåòîä - ôóíêöèÿ, ïðèíàäëåæàùàÿ êëàññó. Ïðîñòîé ïðèìåð êëàññà - "÷åëîâåê". Ñâîéñòâàìè ýòîãî êëàññà áóäåò "öâåò âîëîñ", "ðîñò", "âåñ" è ò.ä., à ìåòîäàìè - "ñïàòü", "åñòü", "õîäèòü" è ò.ï.


Äëÿ òîãî, ÷òîáû âîñïîëüçîâàòüñÿ êëàññîì, íåîáõîäèìî ñîçäàòü åãî ýêçåìïëÿð. Ýêçåìïëÿð êëàññà - ýòî ðåàëüíûé îáúåêò, äëÿ êîòîðîãî âûäåëåíà ïàìÿòü è óñòàíîâëåíû çíà÷åíèÿ âñåõ ñâîéñòâ. Äëÿ êëàññà "÷åëîâåê" ýêçåìïëÿðîì áóäåò êîíêðåòíûé èíäèâèä ñî ñâîèì öâåòîì âîëîñ, ðîñòîì, âåñîì è íîìåðîì ïàñïîðòà.


Îäíî èç ïðåèìóùåñòâ îáúåêòíîãî ïîäõîäà ïðè ðàçðàáîòêå ñèñòåì - âîçìîæíîñòü ñêðûòèÿ îñîáåííîñòåé ðåàëèçàöèè îòäåëüíûõ ìåòîäîâ. Íàïðèìåð, êëàññ "÷åëîâåê" ðåàëèçóåò ìåòîä "õîäèòü", êîòîðûé âûïîëíÿåò ïåðåìåùåíèå ýêçåìïëÿðà êóäà-ëèáî. Ïðè ýòîì íàì ñîâåðøåííî íå âàæíî, êàê áóäåò ïðîèçâåäåíî ïåðåìåùåíèå: íà íîãàõ, íà êîñòûëÿõ èëè ñòîÿ íà ðóêàõ. Ãëàâíîå - ìû çíàåì, ÷òî ïîñëå âûçîâà ìåòîäà "õîäèòü" ýêçåìïëÿð ïåðåìåñòèòñÿ êóäà ñêàæåì.


Ðàññìîòðèì äðóãîé ïðèìåð - ãðàôè÷åñêèå ôèãóðû. Íàïðèìåð:

<?php
    // îáúÿâëÿåì êëàññ ñ èìåíåì Rectangle
    class Rectangle
    {
        // ñâîéñòâî "øèðèíà"
        private $width;
        // ñâîéñòâî "âûñîòà"
        private $height;

        // êîíñòðóêòîð êëàññà
        public function __construct($x, $y)
        {
            $this->width = $x;
            $this->height = $y;
        }

        // ìåòîä "ïîñ÷èòàòü ïëîùàäü"
        public function Square()
        {
            return $this->width * $this->height;
        }
    }

    // ñîçäà¸ì ìàññèâ ïðÿìîóãîëüíèêîâ
    $rects = array();
    // çàïîëíÿåì ìàññèâ ýêçåìïëÿðàìè
    $rects['1'] = new Rectangle(100, 100);
    $rects['2'] = new Rectangle(20, 200);
    $rects['3'] = new Rectangle(300, 50);

    // âûâîäèì ïëîùàäü êàæäîãî ýêçåìïëÿðà
    foreach($rects as $key => $rect)
    {
        echo 'Ïëîùàäü ' . $key .
                ' ïðÿìîóãîëüíèêà: ' . $rect->Square() .
                ">br />\n";
    }
?>

Îáúÿâëåíèå êëàññà íà÷èíàåòñÿ ñ êëþ÷åâîãî ñëîâà "class", ïîñëå êîòîðîãî çàïèñûâàåòñÿ èìÿ êëàññà. Òåëî êëàññà (âñå ñâîéñòâà è ìåòîäû) îãðàíè÷èâàþòñÿ ôèãóðíûìè ñêîáêàìè "{}". Îáúÿâëåíèå ëþáîãî ñâîéñòâà èëè ìåòîäà íà÷èíàåòñÿ ñ êëþ÷åâûõ ñëîâ public èëè private, îïðåäåëÿþùèõ îáëàñòü âèäèìîñòè ñâîéñòâà èëè ìåòîäà. Ýëåìåíòû, ïîìå÷åííûå "public" (ïóáëè÷íûå) âèäíû èçâíå êëàññà, à ïîìå÷åííûå "private" (÷àñòíûå) ìîæíî èñïîëüçîâàòü òîëüêî âíóòðè ýòîãî æå êëàññà. Íàïðèìåð:

<?php
    // ñîçäà¸ì ýêçåìïëÿð êëàññà
    $rect = new Rectangle(100, 100);
    // âûçîâ ïóáëè÷íîãî ìåòîäà
    echo $rect->Square();
    // ïîïûòêà îáðàæåíèÿ ê çàêðûòîìó
    // ñâîéñòâó âûçîâåò îøèáêó
    echo $rect->width;
?>

Ñâîéñòâà êëàññà îáúÿâëÿþòñÿ êàê îáû÷íûå ïåðåìåííûå (ñì. ïåðåìåííûå $width è $height), à ìåòîäû êëàññà - êàê îáû÷íûå ôóíêöèè. Îñíîâíîå îòëè÷èå â òîì, ÷òî âíóòðè ìåòîäà íåïîñðåäñòâåííî äîñòóïíû âñå ñâîéñòâà è ìåòîäû äàííîãî êëàññà, ò.å. íåò íåîáõîäèìîñòè ïîëüçîâàòüñÿ êîíñòðóêöèåé global. Äëÿ óêàçàíèÿ òîãî, ÷òî âû õîòèòå îáðàòèòüñÿ ê ìåòîäó èëè ñâîéñòâó òåêóùåãî ýêçåìïëÿðà íàäî âîñïîëüçîâàòüñÿ ññûëêîé $this, êîòîðàÿ àâòîìàòè÷åñêè äîñòóïíà âíóòðè ýêçåìïëÿðà ëþáîãî êëàññà (ñì. êîä ìåòîäà Square() ).

Ýêçåìïëÿð êëàññà ñîçäà¸òñÿ ïðè ïîìîùè êëþ÷åâîãî ñëîâà "new" è èìåíè êëàññà. Êîíñòðóêöèþ

<?php
    $rect = new Rectangle(100, 100);
?>

ñëåäóåò ÷èòàòü êàê "Ñîçäàòü ýêçåìïëÿð êëàññà Rectangle ñ âûñîòîé 100, øèðèíîé 100, ññûëêó íà ýêçåìïëÿð ïîìåñòèòü â ïåðåìåííóþ $rect".  ìîìåíò ñîçäàíèÿ êëàññà àâòîìàòè÷åñêè âûïîëíÿåòñÿ ñëóæåáíûé ìåòîä, ò.í. "êîíñòðóêòîð". Îí èìååò ôèêñèðîâàííîå èìÿ "__construct()", à òèï è êîëè÷åñòâî ïàðàìåòðîâ îïðåäåëÿåò ðàçðàáîò÷èê. Îñíîâíîå íàçíà÷åíèå êîíñòðóêòîðà - èíèöèàëèçàöèÿ âíóòðåííèõ ïåðåìåííûõ è ñâîéñòâ êëàññà. Åäèíñòâåííîå îòëè÷èå êîíñòðóêòîðà îò îáû÷íîãî ìåòîäà - êîíñòðóêòîð íå ìîæåò âîçâðàùàòü çíà÷åíèå. Ïðèìåð:

<?php
    // îáúÿâèëè êëàññ ñ êîíñòðóêòîðîì
    class DemoClass
    {
        private $a;
        private $b;
        private $c;
        private $d;

        public function __construct($a, $b, $c)
        {
            $this->a = $a;
            $this->b = $b;
            $this->c = $c;
            $this->d = 'my secret string';
        }

        public function getSecret()
        {
            return $this->d;
        }
    }

    // ñîçäà¸ì ýêçåìïëÿð êëàññà
    $demo = new DemoClass('a', 'b', 'c');
    // âûâîäèì ñåêðåòíóþ ñòðîêó
    echo $demo->getSecret();
    // ñòðîêà 'my secret string' âûâîäèòñÿ,
    // õîòÿ ìû å¸ ÿâíî íå èíèöèàëèçèðîâàëè
?>

Ýêçåìïëÿðû êëàññîâ óäàëÿþòñÿ òàê æå, êàê âñå ïåðåìåííûå PHP - ïîñðåäñòâîì âûçîâà unset(). Ïðè óäàëåíèè ýêçåìïëÿðà àâòîìàòè÷åñêè âûçûâàåòñÿ åãî äåñòðóêòîð. Ýòî ñëóæåáíûé ìåòîä áåç ïàðàìåòðîâ ñ èìåíåì "__destruct()", â êîòîðîì ïðîãðàììèñò ìîæåò ÿâíî çàêðûòü è îñâîáîäèòü âñå ðåñóðñû, èñïîëüçóåìûå ýêçåìïëÿðîì. Ïî óìîë÷àíèþ, âñå ðåñóðñû ãàðàíòèðîâàííî îñâîáîæäàþòñÿ ïî îêîí÷àíèè âûïîëíåíèÿ ñêðèïòà.

ÎÎÏ - èíòåðåñíàÿ îáëàñòü PHP, íî èçó÷àòü å¸ â îòðûâå îò ïðàêòèêè î÷åíü ñëîæíî. Ïîýòîìó ñåé÷àñ ìû íå áóäåì âäàâàòüñÿ â òîíêîñòè è ïîäðîáíîñòè, à ðàññìîòðèì èõ ïîçæå ïðè ðåøåíèè ïðàêòè÷åñêèõ çàäà÷.



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



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