<?php
function test($obj) {
$obj->a++;
}
$obj = new stdClass();
$obj->a = 1;
test($obj);
echo $obj->a;Ekran çıktısı olarak 2 çıkıyor. Global olmadığı için 1 olarak göstermesi gerekmiyor mu?
Fonksiyon Sorusu
10
●387
- 05-08-2018, 13:09:24@mahirtaha; @M_D_5;
function test($degisken) { $degisken++; } $degisken = 1; test($degisken); echo $degisken;Object yerine string yapınca, 1 çıkıyor. Fonksiyon içinde global $degisken; yazsaydık 2 çıkacaktı.
Yani object olunca global tanımlamaya gerek kalmıyor, hep 2 çıkıyor. Aradaki farkı anlayamadım tam olarak. - 05-08-2018, 13:38:21sizin değişken adını $str yapmanız değişkeni string değişkeni yapmaz. String türünde bir değişken oluşturup 1 basmak istiyorsanız $str = 1; şeklinde değil $str = "1"; şeklinde tanımlamanız gerekir.soulmy adlı üyeden alıntı: mesajı görüntüle
Burda anlatmaya calıstıgım obje de olsa değişkende olsa siz 1 e eşitliyip int bir değer veriyorsunuz bunu da test fonksyionunda 1 artırıyorsunuz. 1+1 =2 sonuu veriyor. String şeklinde kullanmak istiyorsanız. $srt = "1"; tırnak ıcınde olmalıdır değişken adlarına gre string yada int olmaz. $double ="5"; dedim diye $double değişkenim double türünde olmuş olmuyor. $double değişkeni bir string şuan için.
Sonucun hep 2 değil sürekli yükselmesini kastediyoranız siz her program satır satır okumaya basladıgında deger onceden ne olursa olsun 1 eşitliyorsunuz. bir önceki el değer 2 olmul olsa bile aynı değişken tekrar 1 e şitlenip bir eklenıyor. her sayfa yenılemesınde. sürekli artırımlı ilerlemek istiyorsanız şöyle bir kod kullanılabilir.
function test($str) { $str++; } session_start(); if(empty($_SESSION["oturumadi"])){ $_SESSION["oturumadi"] = 0; } test($_SESSION["oturumadi"]); echo $_SESSION["oturumadi"]; - 05-08-2018, 13:54:42Doğ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. - 06-08-2018, 05:53:52PHP 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.
soulmy adlı üyeden alıntı: mesajı görüntüle