Selamlar,
C/C++/Go vb dillerde pointer kullanımı var. Çoğu zaman fazla kod yazmanızı önlüyorlar. Php'de ise pointer benzer references(&) kullanımı var. Ama tam anlamıyla pointer gibi çalışmıyor.
Aşağıda bunun farkını anlatan yalın bir anlatım var.
i think the code below can tell the difference between PHP reference and C pointer:
In PHP:
<?php
$a = 0;
$b = &a;
echo $a; //0
unset($b); // unset $b
echo $a; //0 it's OK
?>
In C:
#include <stdio.h>
int main(int argc, char const *argv[]) {
int a = 0;
int* b = &a;
printf("%i\n", a); //0
free(b); // free b
printf("%i\n", a); //get error: *** error for object 0x7fff6350da08: pointer being freed was not allocated
}
Kaynak:
http://php.net/manual/en/language.references.arent.php#107881
PHP'de bu tür kullanımları PHP manual dışında pek görmedim.. Bu günlerde laravel için bir dil eklentisi yazmaya çalışıyorum. Bazı durumlarda refereces kullanımı kodlamayı çok kolaylaştırıyor. Özellikle dizi ve nesnelerle çalışırken. Bir işlem yapmak için değişkeni kopyalamak ve sonra üzerinde yazmakla uğraşma derdinizden kurtarıyor sizi.
Örnekdeki gibi:
public function testPointer() {
$dizi = [1,"Murat",3,];
$pointer = &$dizi[1];
// parametre olarak girilen değiştiriliyor.
$this->change($pointer);
// test edelim.
$this->assertEquals("değişti", $dizi[1]); // passed!
$this->assertEquals($dizi, [1,"Murat",3,]); // failed!
}
public function change(&$value) {
$value = "değişti";
}
Özetle references kullanayım, kullanmayayım mı? Siz ne düşünüyorsunuz?