PHP variable management

1 Like

Articolul pare să fie scris pe „Thursday, August 4, 2011”. De atunci și mai ales de când cu PHP 7, mă gândesc că multe s-au schimbat în reprezentarea variabilelor. Ce e sigur e că array-urile au fost overclock-ate.

1 Like

In tema

https://nikic.github.io/2015/05/05/Internal-value-representation-in-PHP-7-part-1.html
https://nikic.github.io/2015/06/19/Internal-value-representation-in-PHP-7-part-2.html

Categoric. Ce-i de tinut minte ii sa nu se arunce cu referinte peste tot, valorile is bune de cele mai multe ori.

Ce vrei să spui prin „a se arunca cu referințe peste tot”?

Vorbim de situații de genul?

function add($a, $b, &$sum) {...}

add(1, 2, $globalSum);
print_r($globalSum);

Că mă îndoiesc că majoritatea știu că pot trimite referința vreunei variabile în PHP. Colegul meu de peste $100.000 pe an „a auzit el că se poate așa ceva în PHP, dar nu știe și nu folosește”. Well, fost coleg. Nu, nu a fost concediat că nu știa asta. S-a dus să lucreze pe bani mai mulți.

Da, cam la asta ma refeream. Am vazut proiecte in care se abuza de referinte.

Lol, cineva a vrut să epateze că e mai bun ca restul. Eu nu am văzut pe nimeni folosind asta și folosesc așa ceva foarte rar pentru că i-aș încurca pe ceilalți.

Anyway, sunt momente când merită. Adică în situații când am de trimis obiecte din clasa ORM. Deși s-ar putea ca obiectele să fie trimise prin referință implicit. Nu am stat să citesc despre asta că nu am timp.

Dacă cineva trage un ochi cum sunt trimise obiectele în PHP 7.1, let us know.

Din php 5 toate obiectele sunt trimise ca referinta si acest lucru s-a pastrat si in php 7.2.* si probabil asa o sa continue.

1 Like

de pe la 5 sunt prin referinta
am migrat codebaseuri de pe 4 pe 5 si asta era unul dintre taskuri, “atentie la referinte”
dar trebuie citit http://php.net/manual/ro/language.oop5.references.php

eu cred ca faceti confuzie intre cum lucreaza php-ul cu variabilele si ce face operatorul &.


edit. am citit aiurea comentariul lui Catalin.

Bănuiam eu că e diferit cu obiectele.

Cât despre & în PHP… It’s more of a fringe subject.

Singurul motiv pentru care in PHP ai pasa explicit unei functii argumente prin referinţă este că vrei să modifici din funcţie variabila referită.

Sincer nu vad de ce ai face asa ceva. Poate crea probleme mari dpmdv.

1 Like

Problemele pot fi create de folosirea improprie a oricarei caracteristici ale limbajului. Faptul ca il avem la dispozitie(referinta) nu inseamna ca trebuie sa abuzam de el dar isi are cu siguranta rostul.

Unele functii din php chiar folosesc referinta pentru folosirea acestora in modul “in place”.

current, next, prev, extract, array_unshift, array_pop, array_push

Aceste functii usureaza programatorul in a mai asigna rezultatul lor unei variabile gen

$array = ksort($array);

Ca si utilitate am avut ocazia sa lucrez cu array-uri foarte mari si transmiterea lor prin referinta in cod m-a scutit de cativa mb de memorie. Chiar la parsarea fisierelor (presupun ?) poate fi folosit sa nu copii continutul in fiecare functie/operatie.

O alta intrebuintare care imi vine minte acum este folosirea referintei la generatoare care sunt o mana cereasca pentru parsarea fisierelor.

Si cum s-a mai zis mai sus referinta la trimiterea obiectelor intre call-uri tocmai pentru a putea salva memorie pe disc.

2 Likes

Ca fapt tangențial, când am de parsat fișiere de sute de MB, le deschid, citesc 500 de linii, salvez poziția, fclose, procesez liniile. Apoi iar deschid fișierul, mut cursorul la poziția liniei 501, citesc 500 de linii, repet.

Până acum nimeni nu s-a prins că aș putea să citesc fișierele continuu, fără să le tot deschid/închid/mut cursorul de fiecare dată. Să vedem câți ani vor trece.