https://bulletproofphp.dev/yes-php-is-worth-using
Pentru cei care se intreaba, cat si pentru cei care il deaconsidera direct.
https://bulletproofphp.dev/yes-php-is-worth-using
Pentru cei care se intreaba, cat si pentru cei care il deaconsidera direct.
O sa dau eu un argument pentru “De ce nu PHP” in 2021, vad ca nu e mentionat in articol.
PHP e teren minat pentru tot ce inseamna securitate, foarte multe functii magice care inofensive dar au impact foarte mare asupra securitatii.
Type juggling, frameworkuri (chiar moderne) au validari pe baza de in_array, array_key_exists:
php > echo var_dump(in_array(true, [1,2,3]));
bool(true)
php > echo var_dump(in_array("2 bottles", ["1","2","3"]));
bool(false)
php > echo var_dump(in_array("2 bottles", [1,2,3]));
bool(true)
php > echo var_dump(in_array("", [0,2,3]));
bool(true)
php > echo var_dump(md5('240610708') == md5('QNKCDZO'));
bool(true)
Chiar daca nu le folosesti, file_get_contents, phar://, getimagesize tot exista si cresc masiv suprafata de atac. Au mai incercat si altii sa faca o varianta de PHP care sa fie “security hardened” si nu au reusit.
In ultimii ani, am auditat mai multe codebase-uri si cele in PHP au fost de departe cele mai slabe ca postura security-wise. Si nu e vorba doar de proiecte legacy, chiar si noi scrise in Lumen au hibele astea.
Sincer nu cred ca merita riscul sa dezvolti in PHP daca securitatea e cat de cat importanta. Laravel nu mi se pare mult mai bun decat Django sau Rails.
It multumesc pentru argumente dar sunt oarecum invalide pentru ca :
Pentru partea de securitate cred ca probleme gasesti in toate limbajele.
Daca stii de toate minele, da, e sigur.
Argumentul era ca o echipa (ex. 10 oameni) care dezvolta in PHP trebuie sa evite mai multe decat una care are acelasi nivel de competenta si dezvolta in Python, nu ca acolo nu ar fi vulnerabilitati.
Degeaba exista parametrul “strict” daca e optional, nu toti pot aprecia cu adevarat riscul cand lipseste.
Nu pot recomanda PHP pentru ca are mai multe probleme sistemice de genul asta si e inevitabil sa nu apara si in bibliotecile si frameworkurile pe care le folosesti.
daca-ar fi sa te iei dupa aberatii de genul celor de mai sus scoatem de pe piata mai multe limbaje, nu doar php.
ps: echo var_dump?
are impresia ca primul hash e de fapt numar. si de acolo toata balaria.
ps, o sa dea true cu orice i-ai da la al 2-lea hash
merge si cu alte valori, nu doar alea doua
pentru ca aecele hash-uri arata asa “0e462097431906509019562988736854” si “0e830400451993494058024219903391” iar daca folosesti == php incearca sa faca si type coercion, iar ca numere sunt egale, de aia e important ca mereu sa folosesti ===
Pentru ca pe undeva a fost intentionat (a fost un trade-off as putea spune).
Si desi sunt de acord cu cele mentionate de tine, tot as recomanda PHP incepatorilor.
chiar va place sa apelati o metoda cu ->
?
Pentru că succesul limbajului a fost accidental. De fapt, inițial nici măcar nu era un limbaj per se.
Uită-te la istoria/motivația din spatele PHP și o să te lămurești de unde atâtea aberații: PHP a fost scris pentru că lui Rasmus nu-i plăcea Perl în mod deosebit, dar avea nevoie de niște utilitare să afișeze informații dinamice în pagină.
Stiu, si de aceea am spus ca a fost intentionat. Iar successul nu a venit accidental ci a venit ca urmare a acestor decizii (luate pentru usurinta utilizarii). Tin si acum minte ce fericit eram ca nu mai trebuie sa declar marimea vectorilor la initializare + faptul ca puteam sa adaug orice in ei
Exista si in C si C++ acel operator
Thread relevant
Dacă tot vorbim despre tâmpenii din PHP: number_format
face round
dacă vrei zero decimale.
echo number_format( 1000000.5, 0, '.', ','); // 1,000,001
ala-i un comportament corect
pentru ca-i mult mai rau decat a apela o metoda cu .
pe bune, daca singurele tale probleme cu un limbaj de programare sunt simbolurile mai bine abtine-te.
Care? round
? Glumești, nu?
Pe mine mă disperă inconsistențele de genul asta, strstr(string $haystack, string $needle)
și array_search(mixed $needle, array $haystack)
, din cauza lor tot timpul când am haystack
și needle
trebuie să mă uit în documentație să văd ordinea parametrilor.
daca ai avea 1000000.4 si ti-ar spune ca-i 1000000, ala n-ar mai fi round?
ar fi frumos sa ma lase sa-i spun cum vreau sa faca rotunjire, da de facut tot face.
Depinde ce te aștepți să facă acel number_format(), truncate, floor, ceil sau round. Au ales și ei ce-au putut
LE Cred că și eu m-aș aștepta la truncate. Din moment ce am ales zero zecimale, înseamnă că nu mă interesează ce-i după virgulă.