PHP Neden bu işlemler farklı?

533388

Hectopat
Katılım
27 Mart 2022
Mesajlar
4.463
Makaleler
2
Çözümler
54
PHP:
<?php

$x = 1;
$y = &$x;

$x = 2;
echo $y;

?>

Çıktı->2

PHP:
<?php

$x = 1;
$y = $x;

$x = 2;
echo $y;

?>

Çıktı->1
Neden pointer kullanınca işlemin sonucu da değişti?
 
Referans veriyorsun x'e. x'in değerini değil, direkt x'in kendisini veriyorsun ampersand kullandığında. Dolayısıyla x'te yaptığın değişiklik onu referans alan her şeyde gerçekleşiyor.
 
@TheAny ve @Vavien.'e katılıyorum. Birkaç şey daha eklemek isterim. Integer, long, string, double değer tiptir. Yani siz değişken oluşturduğunuzda bellekte "Stack" adı verilen bölgede tutulmaktadırlar.

Array'ler, object'ler, interface'ler, struct'lar ise referans tiptir. Depolanmaları "Heap"te olurken, bu tipte oluşturduğunuz değişkenlerin "Heap"te nerede tutulduğu "Stack" üzerinde tutulur.

Örnek verip ufkunuzu açacağım merak etmeyin

Gördüğünüz gibi a = 10 dediğimizde Stack üzerinde a'nın değerinin 10 olduğu tutulmakta.
obj = object dediğimizde ise obj'nin değeri, obj'nin "Heap"te nerede tutulduğu olur. Ve bu değer de "Stack" üzerinde tutulur.

Yani siz sonradan gidip de yeni bir değişkenle obj2 = obj derseniz, obj2'de yine obj'nin "Heap"te nerede tutulduğunu refere eder. obj2 üzerinden yaptığınız işlem de doğal olarak obj'nin üzerinde değişiklik yapar.

Yani siz aslında obje oluşturduğunuzda doğrudan objeyi değil objenin tutulduğu yeri değer olarak alıyorsunuz.
 

Anladım hocam teşekkür ederim.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…