[php] Funkcja w funkcji i zasięg zmiennych

0

Cześć, mam następujący kod:

function test($a)
{
		function innerTest()
		{
			$b = $a+1;
			return $b;
		}
		
	return innerTest();	
}

Za pomocą kodu:

echo test(1);

chcę, żeby mi wyświetliło liczbę 2.

Oczywiście to nie działa. Co mam zrobić, żeby zadziałało? Czytam, szukam i nic nie mogę znaleźć.

0

Co zrobic? Zmienic model programowania, bo nie jest to ani proceduralne, ani strukturalne; wlasciwie nawet nie do konca imperatywne.

Zle nawyki z Pascala?

0
Szczawik napisał(a)

Co zrobic? Zmienic model programowania, bo nie jest to ani proceduralne, ani strukturalne; wlasciwie nawet nie do konca imperatywne.

Zle nawyki z Pascala?

Potrzebuję jedną funkcję, którą wywołuję tylko z poziomu innej funkcji i nigdzie więcej do niczego mi nie jest potrzebna. Naprawdę się nie da?

0

A nie przyszło Ci do głowy, żeby przekazać to jako parametr

function test($a)
{
                function innerTest($a)
                {
                        $b = $a+1;
                        return $b;
                }
               
        return innerTest($a);       
} 

Jedna z podstawowych zasad programowania: "Precz za zmiennymi globalnymi, jeśli da się to zrobić inaczej".

0

Taki przykładowy kod w JavaScript:

function test(a){ 
  function inner() { 
    var b = a + 1; 
    return b; 
  }; 
  return inner(); 
}

Działa tak jakby Juhas chciał, szkoda, że w PHP się tak nie da.

0

Da się w PHP 5.3

0

Nie deklaruj funkcji w funkcji. Nawet jeśli chcesz ją wykorzystywać tylko wewnątrz test(), to napisz ją w obszarze globalnym, tak jak każdą inną funkcję.
A jeśli chcesz lepiej zorganizować swój kod to zapoznaj się z programowaniem obiektowym.

Jeśli mi nie wierzysz, że nie powinno się tak pisać w PHP, to sprawdź sobie ten kod:

<?php

    function test( $a )
    {
        function innerTest( $a )
        {
            $b = $a + 1;
            return $b;
        }

        return innerTest( $a );
    }

    echo test( 1 );  // Pierwsze wywołanie funkcji
    echo test( 2 );  // Drugie wywołanie funkcji

?>
0
      function innerTest( $a )
      {
         $b = $a + 1;
         return $b;
      }
    function test( $a )
    {
        return innerTest( $a );
    }

Po co kombinować?

1 użytkowników online, w tym zalogowanych: 0, gości: 1