Doğru Cevap
-
$degisken =& fonksiyon();
şeklindeki ifade; fonksiyon() adlı fonksiyonun döndürdüğü "kopya" değeri değil, fonksiyon içinde oluşturulan değişkenin değerini işaret eder.
yani:$degisken = Null; function fonksiyon( $deger ){ global $degisken; return ( $degisken = $deger ); } $bos_deger =& fonksiyon( Null ); echo '<br>$degisken\'in değeri: ' . $degisken; $dolu_deger =& fonksiyon( "deneme" ); echo '<br>$degisken\'in fonksiyon("deneme") atamasından sonraki değeri: ' . $degisken; echo '$dolu_deger\'in değeri: '. $dolu_deger; echo '$bos_deger\'in değeri: '. $bos_deger;
-
Alexander
sorumun birinin cevabını aldım çok teşekkür ederim.
şimdi function &fonksiyon_adi(){ ...} buradaki & karakterinin ne işe yaradığı kaldı.12 yıl önce yazılmış -
tutkun
ikisi aynı şey.
yani fonksiyonu her kullanışta buraya "=& fonksiyon( ... );" diye yazmak yerine fonksiyonu tanımlarken "function &fonksiyon( ... ) { ... }" şeklinde tanımlıyorsun. bu sayede bu fonksiyon doğuştan değerin kopyası yerine bellekteki adresi gönderiyor ;)12 yıl önce yazılmış -
Alexander
çok teşekkür ederim utku kafamdaki soru işaretlerini kaldırmış oldum senin sayende12 yıl önce yazılmış
-
Cevaplar
-
=& bu operatörü ilk defa gördüm ve deneme gereği duydum ama gördüm ki kullanılsa da kullanılmasa da herhangi bir değişiklik olmuyor.İyi günler hocam.
-
Alexander
aynen bende de o şekilde . Bende bunu merak ediyordum . Çünkü bu kullanımları codeigniter framework kodlarında kullanılmış12 yıl önce yazılmış -
tutkun
Olur mu yaa! :)
Bunun kullanılması bellekte var olan işlemin tekrarını önlemek.
Yani şunun gibi bir şey:
Bir kek yapmak için, bir bardağı kalıp olarak kullanıyoruz diyelim.
Her seferinde raftan aynı özelliklere sahip bir bardak alıp, masanın üzerine bırakmak(kirletmek) mi,
yoksa bir bardak alıp, tüm işlemi onunla idame etmek mi mantıklı? :)
Biraz enteresan örnek oldu; ama idare edin :))11 yıl önce yazılmış -
Alexander
Peki fonksiyonu şu şekilde tanımladığım zaman =& şeklinde atama yapmama gerek varmı?
function &ref_donder() { $ref = 'deneme'; return $ref; }
Araştırdığıma göre fonksiyon bu şekilde tanımlanırsa $a = ref_donder() ile $a =& ref_donder() arasında fark kalmıyor.
Doğrumudur ?11 yıl önce yazılmış -
tutkun
En iyisi şöyle anlatayım:
=& işareti, aslında referans demektir; malum...
class Referans { public $ali, $veli; public function Ali() { $this->veli = "Ali"; // Ali artık $this->veli'nin değeri... } public function VeliyiReferansAl() { $this->ali =& $this->veli; // $this->ali artık $this->veli'nin değerini işaret ediyor(referans gstryor). } } $referans = new Referans(); // sınıfı tanımladık $referans->Ali(); // veli'ye değer atadık echo $referans->veli . "<br>"; $referans->VeliyiReferansAl(); // ali, veli'nin değerini kullanacak(referans alacak) echo $this->ali . "<br>"; // şimdi bakalım $this->ali'yi değiştirirsek ne olacak... $this->ali = "Ben Ali'yim, ama burası Veli'nin mekanı!"; echo $this->ali . "<br>"; echo $this->veli . "<br>";
11 yıl önce yazılmış -
tutkun
evet, fonksiyon içinde sabit değer atanıyor. bu yüzden ikisi arasında fark yok. zaten fonksiyon duşına çıkınca $ref yok olacak.11 yıl önce yazılmış
-