2. Klasės ir objektai

Viso objektinio programavimo pagrindas yra klasės ir jų objektai. Iš pirmos pamokos kažkiek turėjote suprasti, kas yra objektinis programavimas ir kam jis naudojamas, bet dabar pažvelkime giliau.

Klasė žymima žodžiu class ir, trumpai tariant, tai yra rinkinys funkcijų bei kintamųjų, kuris apjungia kažkokią vieną prasmingą temą ar paskirtį. Kaip jau minėjau praeitoje pamokoje, klasė gali būti skirta vartotojų valdymui, straipsnių valdymui, darbui su krepšinio aikštelių duomenimis, gali būti klasė bendrai darbui su duomenų baze - žodžiu, pritaikymas yra begalinis, bet esmė yra kažkokia konkreti tema.

Konkretus pavyzdys - tas pats kodas be OOP ir su OOP:

Paprastas "funkcinis" programavimas:

function getUser($user_id) { ... } function addUser($user_data) { ... } function getAllUsers() { ... } function getArticle($article_id) { ... } function addArticle($article_data) { ... } function getAllArticles() { ... }

Tos pačios funkcijos suskirstytos klasėmis:

class Users { function get($user_id) { ... } function add($user_data) { ... } function getAll() { ... } } class Articles { function get($article_id) { ... } function add($article_data) { ... } function getAll() { ... } }

Tokiu būdu turime visas funkcijas ne vienoje vietoje, o skirtingose klasėse, kiekviena iš kurių turi savo prasmę ir paskirtį. Dar, kaip taisyklė, klasės yra skirstomos į failus - auksinė taisyklė yra viena klasė - vienas failas. Galima sukurti katalogą /classes ir ten išsaugoti tas klases failuose Users.php ir Articles.php.

Taip pat ar pastebėjote, kad pervadinau ir pačias funkcijas? Nes mums nebereikia vadinti jas pilnai su konkrečia paskirtimi - dalis tos paskirties bus žinoma iš klasės pavadinimo.

Kalbant apie funkcijas klasių viduje, reikia žinoti, kad naudojant OOP tos funkcijos turi specialų pavadinimą - metodai ("methods"). Tad jei išgirsite kur nors frazę "metodai" ar "klasės metodai", turėkite omenyje kad tai tos pačios funkcijos, tik vadinamos kitaip.

Objektai

Taigi, sakykime, kad turime sukūrę tas dvi klases, aptartas viršuje. Dabar galime kurti jų objektus. Kas tai yra? Tai yra tų klasių konkretūs kintamieji. Kitaip tariant, klasė yra funkcijų ir kintamųjų aprašymas, o objektai yra konkretūs tų funkcijų panaudojimo pavyzdžiai. Sakykime, class Users aprašo viską, ką galima padaryti su vartotojais, o kintamasis $user būtų konkretus vartotojas, kuriam taikytume įvairias klasės funkcijas.

Kaip tai atrodo kode:

class Users { function getAll() { return array('Petriukas', 'Jonukas'); } } $user = new Users; $users_list = $user->getAll();

Kaip matote, turime sukurti klasės objektą su komanda new, po kurios turi sekti klasės pavadinimas - ir visas rezultatas priskiriamas kažkokiam kintamajam.

Kuriant objektą su komanda new, galima po klasės pavadinimo dėti skliaustus, o galima ir nedėti. Abu variantai veiks.

$user = new Users; $user = new Users();

Skliaustai reikalingi tam, jeigu klasės sukūrimo metu būtų naudojami parametrai - panašiai kaip funkcijos parametrai. Apie tai plačiau kalbėsime ateityje pamokoje, kai tema bus klasės konstruktoriai.

Turėdami klasės objektą, galime jau naudotis tos klasės funkcijomis, po kintamojo rašydami simbolius -> - kaip matome pavyzdyje $user->getAll().

Grįžkime prie pirmoje pamokoje matyto pavyzdžio su namais:

Dabar turėtume suprasti šį pavyzdį giliau - schema viršuje būtų class House, o apačioje esantys namai būtų $house_first = new House; ir $house_second = new House;.

Ir jeigu klasėje House būtų funkcija build($name) su namo pavadinimo parametru, tai galėtume vieną namą pastatyti su vienu pavadinimu, o kitą su kitu:

$house_first->build('Home Sweet Home'); $house_second->build('Multi-Corporations Inc.');

Štai ir viskas, kas susiję su klasėmis ir objektais. Juk nieko sudėtingo, ar ne? Bet šitą teoriją reikia perprasti labai gerai, nes tai objektinio programavimo pagrindas. Tad jei turite šioje vietoje kokių nors neaiškumų ar klausimų, būtinai kreipkitės, o kitoje pamokoje kalbėsime apie klasių savybes ("properties").

Dvi pamokos pateikiamos nemokamai.
Jei patiko - pirmyn toliau!

Pirkti visą kursą (23 EUR)