Enuntul urmator, adaptat din tema unui curs de PHP
procedural, cere, practic, relationarea a doua fisiere php care contin functii
pentru generarea si validarea unor valori numerice.
"Creati un mini-proiect PHP cu fisiere, plasat intr-un director accesibil prin URL-ul http://localhost/.../ . In acel director se vor afla urmatoarele fisiere/directoare:
1) directorul include, care contine fisierul utils.php, in care se definesc:
a) o constanta NR_DATE, cu o valoare numerica la alegere;
b) o functie validareData() ce valideaza o data calendaristica. Functia primeste 3 argumente: zi, luna si an (toate numerice) si verifica daca ziua se incadreaza in numarul maxim de zile ale lunii specificate;
2) fisierul statistici_date.php, in care:
a) se include utils.php, pentru a avea disponibile constanta si functia de validare. Se va folosi o cale relativa (require "include/utils.php"), pentru a nu face site-ul dependent de sistemul local de fisiere;
b) se realizeaza o bucla in care se genereaza NR_DATE date calendaristice (se genereaza ziua, luna si anul folosind functia rand() ). Fiecare data generata se va afisa pe ecran: cele valide cu verde, cele invalide cu rosu. Pentru validare se va folosi functia validareData() scrisa anterior. Anul se va genera intre 1900* si 2100;
c)la sfarsit se va afisa statistica: X date valide, Y date invalide."
In solutia propusa, validarea porneste
de la criteriul lunii generate aleator. Domeniul acoperitor de generare a
valorilor pentru zile este (1, 31). Daca luna este prima, a treia, a cincea, a
saptea, a opta, a zecea sau a douasprezecea, corectitudinea datei este
asigurata de insasi domeniul fixat pentru zile.
Daca luna este februarie (a doua) si daca valoarea este
superioara lui 28 (in cod, $d > 28) atunci, daca anul ($y) este bisect (test prin functia isLeap()) si
daca ziua $d == 29 inseamna ca data este valida. In cazul contrar ultimei clauze if (<==>
$ > 29), data e invalida.
Daca luna este a 2-a si ziua este mai mica sau egala cu
28, data generata este valida, indiferent de an, ordinar sau bisect.
Daca luna este a patra, a sasea, a noua si a unsprazecea,
orice zi $d <=30 implica o data valida, indiferent de an.
Instructiunea switch si gruparea case-urilor pentru
lunile cu 30 de zile simplifica functionalitatea codului.
Pentru afisare, s-a folosit o lista neordonata intr-un
element de pagina pozitionat stanga si un tabel pozitionat in dreapta listei.
Domeniul pentru anii generati cu functia rand a fost
fixat la (1920, 2100). Nu ca ar avea importanta prea mare, dar in 1919, in
primavara, s-a introdus in Romania reforma calendarului gregorian, astfel incat
de la 14 aprilie (1 aprilie pe stil vechi) anul respectiv, datele calendaristice
pot fi in mod consistent corelate cu zilele saptamanii ;-)