Pirmadienį buvo pateikta 10 PHP klausimų, kaip ir žadėjau šiandien pateiksiu atsakymus.

1. Kuo skiriasi metodų overriding’as nuo overloading’o?

Overloading ir Overriding turi tik vieną panašumą (panašiai skambančius pavadinimus), kuris gali suklaidinti pradedančiuosius ne tiek iš techninės pusės, kiek iš elementaraus terminų žinojimo. Overloadingas - galimybė gauti visus kreipinius į klasę ir juos interpretuoti savaip. Taip galime sukurti virtualius metodus ar net klasės savybes. Be abejonės, toks kodas turi didelį minusą, nes daug sunkiau skaitomas. Tiesa, pats terminas gali kiek klaidinti žmones perėjusius iš aukštesnio lygio programavimo kalbos, kurioje naudojamas OOP, nes ten overloadingas reiškia klasės metodų persidengimą priklausomai nuo parametrų kiekio. Daugiau informacijos jums pateiks google.

Na, o overridingas yra paprasčiausias klasės metodo ar savybės perrašymas paveldėjimo metu. Jeigu jūsų tėvo pomėgis buvo sportas, tai nebūtinai reiškia, kad jūs irgi privalote sportuoti. Tiesa?

2. Kada naudosite require, o kada include funkcijas failų įterpimui į scenarijų?
Apie include ir require skirtumus jau buvo rašyta pixelyje. Laiko taupymo sumetimais pacituosiu: “Include - kuomet failas nėra svarbus, ir jeigu jo nebus - skriptas veiks toliau. Require, kai be failo skriptas neapsieis, tad jis turės būti nutrauktas.” (Asterisk)

3. Ar logiškas teiginys: “Funkcija echo yra analogiška funkcijai print.” ?
Taip Ne, teiginys nėra logiškas, nes tiek echo, tiek print yra kalbos konstruktoriai ir jų negalima vadinti funkcijomis.

4. Kas yra MVC?
MVC - aplikacijų kūrimo ideologija, kuria remiantis sistemas reikia skaidyti į tris dalis: MODEL - VIEW - CONTROLLER. “Model skirtas darbui su duomenimis, View skirtas vartotojui pateikti duomenis, o Controller apdoroti vartotojo perduodamus duomenis.” (buuu)

5. Kuo skiriasi $test nuo $$test?
“$test - kintamasis. $$test - taip pat kintamasis, tiesiog pastarojo pavadinimas yra dinaminis ir priklausomas nuo $test kintamojo. Jeigu $test = ‘kazkas’; o $$test = ‘kazkas1; tai echo $kazkas; // kazkas1″ (Asterisk)

6. Kam reikalinga funkcija nl2br ()?
“nl2br() funkcija naujos eilutės tekstinio formato simbolių pavertimui į html formato naujos eilutės simbolį
(new line to br)” (Asterisk)

7. Kaip sunaikinti nebereikalingą vartotojo slapuką (cookie)?
“Suteikti galiojimo datą, kuri jau pasibaigė ir naršyklė pati panaikins slapuką išjungus/įjungus naršyklę (arba jeigu nesunaikins tai paprasčiausiai jo nesiųs serveriui).” (Asterisk)

8. Kuo skiriasi klasės metodų ir savybių matomumo savybės private, protected ir public?
Atsiradus 5 išsiplėtė OOP funkcionalumas. Vienas iš pasikeitimų perėjus nuo 4 yra tas, kad dabar metodai ir savybės privalo turėti matomumo/pasiekiamumo parametrą (private, protected, public). Private - metodas ar savybė pasiekiama tik tos klasės viduje. Protected - pasiekiama tik tos klasės arba klasės, kuri ją paveldi viduje. Na, o metodai turinys public savybę yra pasiekiami visur tiek išorėje, tiek viduje. Beje, šiandien manęs klausė kokia prieinamumo savybė (private, public ar protected) nustatoma, jeigu klasės metodui nenurodome jo išvis ( 5, dar susišneka su 4). Taip, jūs teisūs - public.

9. Kokia SQL užklausa ištrauksite visus A lentelės unikalius ID, kurie nepasikartoja lentelėje B (lentelėje egzistuoja laukelis ID)?
Vienas iš patogiausių būdų gauti tik tuos įrašus, kurie neturi jungties antroje lentelėje, mano manymu, yra šis:

SELECT a.id FROM a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL;

10. Jonukui buvo liepta parašyti scenarijų, kurio pagalba iš duomenų bazės ištraukiami savaitės senumo duomenys.
Duomenys yra kešuojami panaudojant unikalų raktą, kuris generuojamas taip - $key = md5 ($query);

Jono kodas:

$pries_savaite = strtotime (-1 week”);
$query = “SELECT * FROM `records` WHERE timestamp > $pries_savaite”;

Kas čia blogai?

Problema egzistuoja, nes kiekvieną kartą vartotojui kreipiantis į puslapį generuojamas vis kitas UNIX TIME STAMP, o tuo pačiu ir skirtinga užklausa į duomenų bazę. Taip duomenų kešavimas praranda reikšmę, nes skirtinga užklausa reiškia skirtingą raktą ($key = md5 ($query)). Taip viską dedame į kešą, tačiau iš jo nieko nepaimame. Jis tampa bevertis.

Problemos sprendimas paprastas - kiekvieną kartą gavus laiką, suapvalinti jį tokiu tikslumu, kurio vertė būtų didesnė arba lygi laikui, kuriam mes norime saugoti duomenis keše.

Labai dėkoju asterisk, už pateiktus atsakymus, tikiuosi kitą kartą aktyvesnio skaitytojų dalyvavimo. Jeigu turite klausimų galite juos palikti komentaruose, pasistengsiu atsakyti kitoje klausimų - atsakymų dalyje.
Ačiū ir atsiprašau už nelietuviškus terminus. :)

Panašūs straipsniai


“10 PHP klausimų #1 (atsakymai)” komentarų: 4

  1. Rimantas

    Kitą kartą lauksiu klausimo ir atsakymo “kuo skiriasi kalbos konstruktorius nuo kalbos konstrukcijos” ;)

  2. lfx

    3 klausimo atsakyme nėra logikos… klausimas skamba ar logiškas teiginys, o atsakymas “[b]taip[/b], nėra… ” ;)

  3. Slave

    Ooops! ;)

  4. DxGx

    9. klausimo atsakymas manau galėtų būti ir toks (be where):
    SELECT a.id FROM a INNER JOIN b ON a.id = b.id;

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.