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 № 1W 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) {
...
}