/ / zmienna o globalnym zasięgu nie wraca z funkcji - php

globalna zmienna o ograniczonym zasięgu nie wracająca z funkcji - php

Myślę, że patrzyłem na to zbyt długo, ale dlaczego nie $sum echo 23? (Chcę mieć zasięg globalny $sum wstrzyknięty do funkcji i zwrócony po zakończeniu funkcji)

<?php

$sum = 0;

function find_divisible() {

for ($i = 0; $i < 10; $i++) {

if ($i % 5 == 0) {
echo "<br>"." $sum is equal to ".$sum." and $i is equal to ".$i;
$sum += $i;
}elseif ($i % 3 == 0) {
echo "<br>"." $sum is equal to ".$sum." and $i is equal to ".$i;
$sum += $i;
}else {
echo "<br/>$i is not divisible...";
}

}

return $sum;

}


find_divisible($sum);
echo "<br>";
echo $sum;
?>

Odpowiedzi:

2 dla odpowiedzi № 1

W twoim kodzie masz 3 główne błędy / problemy:

1. Zapomniałeś następującego wiersza w swojej funkcji (u góry)

global $sum;

2. Wracasz $sum, ale nie przypisujesz wywołania funkcji do zmiennej, więc możesz ją usunąć

3. Zdajesz $sum jako argument funkcji, ale funkcja nie przyjmuje żadnych argumentów, więc usuń wszystkie parametry w wywołaniu funkcji


Ale aby zarchiwizować swój cel, widzę 3 (4) różne sposoby!

1. Ze zmiennymi globalnymi (co teraz robisz (ale nie polecałbym tego, ponieważ później naprawdę się zdezorientujesz i enkapsulacja? Możesz zapomnieć o tym, jeśli używasz globalnego))

2. Możesz przekazać zmienną jako argument, kod wyglądałby mniej więcej tak:

$sum = 0;

function find_divisible($sum) {

//Code

return $sum;

}

$sum = find_divisible($sum);
echo $sum;

3. Możesz przekazać zmienną przez referencję, twój kod wyglądałby mniej więcej tak:

$sum = 0;

function find_divisible(&$sum) {
//^ See here

//Code

}

find_divisible($sum);
echo $sum;

(4). Jeśli mówisz, nie musisz używać żadnego parametru $sum wynosi zawsze 0 i po prostu wracasz $sum i przypisz ją do zmiennej, twój kod wyglądałby mniej więcej tak:

function find_divisible() {

$sum = 0;

//Code

return $sum;

}

$sum = find_divisible();
echo $sum;

(Mam nadzieję, że ta odpowiedź pomoże ci, myślę, że zawsze dobrze jest widzieć różne sposoby / rozwiązania)


2 dla odpowiedzi nr 2

Możesz zdać $sum jako odniesienie takie:

function find_divisible(&$sum) {
// code here
}

Ale nie musisz zwracać go z funkcji. Wszelkie zmiany dokonane w funkcji zostaną wprowadzone do oryginalnej zmiennej, do której przekazałeś find_divisible($sum)


1 dla odpowiedzi nr 3

Wystarczy użyć globalnego słowa kluczowego.

global $sum;

Chociaż polecam wziąć to jako taki parametr.

function find_divisible($sum) {
...
}