• 06-08-2018, 07:48:01
    #10
    xBrainTR adlı üyeden alıntı: mesajı görüntüle
    PHP de objeler fonksiyona parametre olarak gönderildiğinde değişkenlerde olduğu gibi "pass by value" değil "pass by reference" olarak gönderilir. $obj değişkeni aslında pointer dır. Fonksiyona değişkenin değerini değil adresini gönderir, böylelikle asıl değişkenin değeri değişmiş olur, fonksiyon içinde yeni bir değişken oluşturulmaz.

    Eğer 2. örnekdeki fonksiyonu "function test(&$degisken)" şeklinde $değişken değişkenini "pass by reference" şeklinde almaya ayarlarsan objedeki gibi sonucu 2 olarak vericektir.
    Tamamdır, öğrenmek istediğim şey buydu. Teşekkürler.
  • 07-08-2018, 00:45:27
    #11
    soulmy adlı üyeden alıntı: mesajı görüntüle
    Doğru doğru, string tabirini yanlış kullandım. Mesajı editledim şimdi.

    Ben tam anlatamadım derdimi. Baştan alalım.

    function test($obj) {
     
        $obj->a++;
     
    }
    
    $obj = new stdClass();
    $obj->a = 1;
    
    test($obj);
    
    echo $obj->a;
    Ekran çıktısı : 2

    function test($degisken) {
     
        $degisken++;
     
    }
     
    $degisken = 1;
     
    test($degisken);
     
    echo $degisken;
    Ekran çıktısı : 1

    Neden farklı sonuç çıkıyor? Onu anlayamadım.
    Çünkü siz ekrana $degiskeni basıyorsunuz. test($degisken) i değil.
    doğru gösterim echo test($degisken) olmalı ve fonksiyonda da return etmeniz daha mantıksal olacaktır. dopru kod şu şekilde.
    <?php
    
    function test($degisken){
    
    $degisken++;
     return $degisken;
    }
    
    $degisken = 1;
     
    echo test($degisken);
    Bu sorunla objede karşılaşmama sebebiniz ise objenin bellekte pointer olarak tutulması obje değeri ile oynuyorsunuz obje değerini tekrar aynı obje değerine yeni sonuç fonksiyonuyla eşitlemek zorunda değilsiniz obje zaten bellekte tutuluyor