Funkcja wewnątrz funkcji. - PHP

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

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.