PHP Neden bu işlemler farklı?

  • Konuyu başlatan 533388
  • Başlangıç Tarihi
  • Mesaj 23
  • Görüntüleme 855

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?
 
@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 :)
1704736842867.png

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.
 
@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 :)
Eki Görüntüle 2078609
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.
 

Technopat Haberler

Yeni konular

Geri
Yukarı