Ten kod daje wynik 56.
function x ($y) {
function y ($z) {
return ($z*2);
}
return($y+3);
}
$y = 4;
$y = x($y)*y($y);
echo $y;
co się dzieje w kodzie? Jestem lekko zdezorientowany. Czy ktoś mógłby mi to wytłumaczyć?
Z góry dziękuję za pomoc!
1 odpowiedź
X zwraca (value +3), a Y zwraca (value * 2)
Przy wartości 4 oznacza to (4 + 3) * (4 * 2) = 7 * 8 = 56.
Chociaż zakres funkcji nie jest ograniczony (co oznacza, że można bezpiecznie „zagnieżdżać” definicje funkcji), ten konkretny przykład jest podatny na błędy:
1) Nie możesz wywoływać y () przed wywołaniem x (), ponieważ funkcja y () nie zostanie faktycznie zdefiniowana, dopóki x () nie wykona się jeden raz.
2) Dwukrotne wywołanie x () spowoduje, że PHP ponownie zadeklaruje funkcję y (), co spowoduje błąd krytyczny:
Fatal error: Cannot redeclare y()
Rozwiązaniem obu byłoby podzielenie kodu, tak aby obie funkcje zostały zadeklarowane niezależnie od siebie:
function x ($y)
{
return($y+3);
}
function y ($z)
{
return ($z*2);
}
Jest to również o wiele bardziej czytelne. pozdrawiam