In acest articol vom vorbi despre un aspect al programarii pe care unii dezvoltatori il ignora. Acest lucru se intampla mai ales pentru ca unele limbaje sunt mai permisive si nu opresc executia atunci cand intalnesc aceasta situatie.
Este si cazul limbajului PHP, care nu considera acest tip de sintaxa o eroare. Dar sa vedem mai intai ce sunt variabilele ca scop. Sunt acele variabile care sunt definite doar interiorul unei declaratii if/else
. Sa luam ca exemplu un caz concret.
<?php $condition = TRUE; if($condition === TRUE) { $result = "Condition is true"; } else { $result = "Condition is false"; } echo $result; ?>
Daca am lua acest cod si l-am rula intr-un fisier PHP ar merge. Mai mult, mi-am setat PHP cu error_reporting
pe E_STRICT
si nu a aruncat nici macar un Notice
. Deci pentru PHP, aceasta sintaxa este corecta. Si atunci ce nu e bine?
Pai nu e bine din punct de vedere logic. Variabila $result
nu "traieste" decat in interiorul declaratiei if/else
. In mod normal nici asta n-ar trebui sa fie o problema. Daca nu e if()
, sigur e else()
, deci e imposibil ca la sfarsitul declaratiei sa nu avem variabila declarata.
Cu toate astea, veti vedea ca daca incercati sa scrieti acelasi cod in Java sau C, programul rezultat nu va compila. Din punctul lor de vedere, codul nu este valid. Si pentru ca este derivat din Java, nici ColdFusion nu accepta aceasta sintaxa pana de curand. Insa incepand cu versiunea 9, a fost modificat sa fie mai permisiv. Acum puteti scrie acest tip de cod si va merge.
Bun, am vazut problema. Care este solutia? Pai, trebuie sa intializam variabila $result
inainte sa ii decidem valoarea in interiorul declaratiei if/else. In acest scop, unii dintre voi veti fi tentati sa modificati codul astfel:
<?php $condition = TRUE; $result = null; if($condition === TRUE) { $result = "Condition is true"; } else { $result = "Condition is false"; } echo $result; ?>
Codul de mai sus nu este gresit, dar poate fi optimizat. Dupa cum vedeti, initializam $result
ca fiind null
. Apoi, in functie de cum se executa conditiile de mai jos, o setam cu valoarea corecta. Cu toate acestea, rationamentul poate fi gandit astfel: Initializam variabila cu valoarea din else si o modificam numai daca se executa conditia din if
. Codul arata asa:
<?php $condition = TRUE; $result = "Condition is false"; if($condition === TRUE) { $result = "Condition is true"; } echo $result; ?>
In acest fel, rezultatul este acelasi, dar scriem mai putin cod.
Deci, de ce ar trebui sa ne intereseze acest aspect daca in PHP codul ruleaza si asa? Eu cred ca este important sa aplicam cat mai des bune practici de programare. Chiar si atunci cand nu este nevoie. E cumva la fel ca HTML-ul (atentie, nu vorbesc de XHTML), unde tag-urile nu trebuie mereu inchise corect. Va merge si cu cateva greseli de nesting. Mai mult, cu putin noroc, in browser se va vedea la fel. Dar cand se uita altcineva prin cod cu siguranta nu va arata a produs de calitate.
Si mai e un avantaj. Nu vom programa mereu in acelasi limbaj. Daca ne obisnuim sa aplicam bune practici in PHP (chiar si cand nu e nevoie), nu va trebui sa ne revizuim stilul de programare cand vom avea un proiect in Java, C sau orice alt limbaj de acest gen.