Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja sama się wykonuje?!
Forum PHP.pl > Forum > PHP
tomilipin
Witam,
mam bardzo dziwny problem: parę lat temu napisałem sobie prosty pager, który wtedy działał bez zarzutu zawsze i wszędzie. Teraz działa tylko wtedy, gdy znajduje się sam w pliku. Taki samolubny się zrobił...
Konkretnie wygląda to tak:

pliczek 'stronicowanie.php'
  1. <?php
  2. // ilosc - ilosc wynikow
  3. // a - zaczynac od zera czy od jedynki
  4. // c - ile na strone
  5.  
  6. function pag($ilosc, $a, $c) {
  7.  if (isset($_GET['start']))
  8.  $start = $_GET['start'];
  9.  else
  10.  $start=1;
  11.  
  12.  while($ilosc>0) {
  13.  if (!isset($b)) $b=0;
  14.  $b=$b+1;
  15.  
  16.  if ((($b-1)*$c)+1==$start) 
  17.  echo "[$b] ";  
  18.  else 
  19.  print '<a href="?start='.$a.'">'.$b.'</a> ';
  20.  
  21.  $ilosc -= $c;
  22.  $a += $c;
  23.  }
  24.  print '<br />';
  25. }
  26.  
  27. print '<p align="center">';
  28. pag(56, 1, 6);
  29. print '</p>';
  30. ?>
Gdy uruchamiam ten kod, wszystko jest w porządku (jeśli skomentuję linijkę 28 to nic się nie wyświetli). Lecz gdy wkleję samą funkcję do innego pliku (lub includuję plik z samą funkcją), pojawiają się błędy:
Cytat
Warning: Missing argument 1 for pag() in index.php on line 6
Warning: Missing argument 2 for pag() in index.php on line 6
Warning: Missing argument 3 for pag() in index.php on line 6
A gdy uruchomię funkcję gdzieś dalej w pliku, podając argumenty: pag(36,1,10); to funkcja wykonuje się dwa razy... Raz w miejscu, gdzie jest zdeklarowana - i tu wyświetla ostrzeżenia, drugi raz w miejscu, gdzie rzeczywiście ją uruchamiam - tu wyświetla numer stron.
Nie mam pojęcia jak to możliwe, nie widzę żadnej reguły szczególnie jeśli funkcja działa normalnie w osobnym pliku...

Starając się pozbyć ostrzeżeń wstawiłem wartości do funkcji; linijka 6 wygląda wtedy tak: function pag($ilosc=0, $a=1, $c=10) { i również w tym przypadku funkcja sama się wykonuje (sprawdziłem to dodając print 'asd'; na końcu).

Co zrobić, aby funkcja wykonywała się tylko tam, gdzie ja tego chcę?
DeyV
Jeśli kodujesz w PHP5, zrób tak:

1. Usuń domyślne wartości parametrów - musisz widzieć, kiedy jest wywoływana
2.W ciele tej funkcji wstaw
throw new Exception( 'błąd pag' );

Skrypt oczywiście od razu się wywali, ale pokaże Ci też, w którym dokładnie miejscu funkcja ta została po raz pierwszy wywołana (dzięki trace które się wykonuje dla każdego tworzonego wyjątka)
tomilipin
Wszystko piszę pod PHP 4 i pewnie dlatego kod, który podałeś się sypie... parser zwraca error unexpected T_NEW

Niemniej jednak tak już namieszałem, że postanowiłem podpiąć pager pod wyniki od nowa i... o dziwo! Działa dobrze smile.gif W funkcji nic nie zmieniałem więc widocznie błąd tkwił w sposobie sprzężenia wyników z pagerem.

Jak zawsze to człowiek stanowi najsłabsze ogniwo. Zdaje się, że temat jest niepotrzebnie założony, można go więc usunąć... Przepraszam za kłopot.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.