[php] Zagnieżdzanie funkcji

0

Napisałam funkcję lista_charakterow_teatrow tworzącą rozwijalną listę. Wywołuję tę funkcję z poziomu innej funkcji:

wykonaj_akcje($akcja,$wiersz['id_char'],lista_charakterow_teatrow($wiersz['id_char']));?>

Niezależnie od tego, który warunek zachodzi lista i tak jest wyświetlana, a powinna się pojawiać tylko w drugim przypadku. Jak sobie z tym poradzić?

function lista_charakterow_teatrow($pozycja)
{
$lacz=lacz();
//charaktery teatrow
$zapytanie="select distinct id_char, charakter
	from charaktery
	order by id_char asc";
$charaktery=mysql_query($zapytanie);
//wyswietlanie listy charakterow
echo '<select class="" name="id_char">';
echo '<option value="">';
while ($wiersz=mysql_fetch_array($charaktery))
  {
  echo '<option value="'.$wiersz['id_char'].'"';
  if ($pozycja<>'' and $pozycja==$wiersz['id_char']) echo ' selected';
  echo '>'.$wiersz['charakter'];
  };
echo '</select>';
return ;
};

function wykonaj_akcje($akcja,$pole_wyswietl,$pole_modyfikuj) 
    {
    if ($akcja=='wyswietl') echo $pole_wyswietl;
    else echo $pole_modyfikuj;
    };

0

Niezależnie od tego, który warunek zachodzi lista i tak jest wyświetlana, a powinna się pojawiać tylko w drugim przypadku. Jak sobie z tym poradzić?

w funkcji lista_charakterow_teatrow zamiast używać echo przypisuj wszystko co chcesz wyświetlić do jakiejś zmiennej np. $result a na końcu daj return $result;

0
  1. selected="selected" tak powinnas przekazywac atrybut, kazda pozycja option powinnao miec tak koncowy </option> ktorego nie dales
  2. nie ma sensu przypisywac zapytania do zmiennej $zapytanie niepotrzebna operacja.
  3. zbedny warunek $pozycja<>''
  4. zamaist przypisywac do zmiennej lepij jest skorzystac z buforowania wykazuje lepsza wydajnosc niz laczenie stringow $wynik .=, a echo mozna zminimalizowac do jednego wywolania w warunku:
//....
ob_start();
echo '<select class="" name="id_char"><option value="">';
while ($wiersz=mysql_fetch_array($charaktery))
  {
  
  if ($pozycja==$wiersz['id_char']) 
  echo '<option value="' . $wiersz['id_char'] . '" selected="selected">' . $wiersz['charakter'] . '</option>';
  else
  echo '<option value="' . $wiersz['id_char'] . '">' . $wiersz['charakter'] . '</option>';  
  };
echo '</option></select>';
$wynik = ob_get_contents();
ob_end_clean();
return $wynik;
  1. Zagniezdzenie funkcji to nie jest tylko bezposrednie przekazanie wyniku do innej funkcji to sa funkcje zagniezdzone:
function p1()
{
  function p2($p) { return $p+2; }
}

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