Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Bug PHP? Uruchamianie klasy w else
Forum PHP.pl > Forum > Przedszkole
uncuncunc
Mam klasę i w niej metode:

  1. private static function check_regex_phone()
  2. {
  3. foreach(self::$array as $key => $value)
  4. {
  5. if(is_string($key))
  6. {
  7.  
  8. $regex = '/^'.$key.'$/';
  9.  
  10.  
  11. if(preg_match($regex, static::$text))
  12. {
  13. self::$found = true;
  14. break;
  15. }
  16.  
  17. }
  18. else
  19. {
  20. unset($key);
  21. }
  22. }// end foreach
  23.  
  24.  
  25. if(true == self::$found)
  26. {
  27. self::connect();
  28. }
  29. else
  30. {
  31. $x = static::$config['default_phone'];
  32. $test = new $x;
  33. $test -> error();
  34. unset($test);
  35. }
  36.  
  37. } // end function check_regex_phone


Która ma za zadanie, przelecieć po tablicy, czy któreś z wyrażeń regularnych pasuje do tekstu. Jeśli tak, zatrzymać dalsze poszukiwania i przejść do kolejnej metody connect(). Jednak nie wiem co robię źle, bo cały czas jest wywoływane to co w else, co śmieszne jak napiszę

  1. else
  2. {
  3. echo 'COKOLWIEK';
  4. $x = static::$config['default_phone'];
  5. $test = new $x;
  6. $test -> error();
  7. unset($test);
  8. }


To echo nie jest wyświetlane, ale klasa błędu jest wykonywana.
BaN
Nie jest określona zmienna $text w wierszu 11. więc warunek nigdy nie będzie spełniony. Tak przy okazji wiersz 20. też nie ma większego sensu
uncuncunc
Zmienna tekst jest zdeklarowana, to static, który istnieje (źle tu zmienilem, juz poprawione). Po usunięciu tego warunku is_string i unset, nadal to samo ;/ juz nie mam sił...

Zauważyłem jedną bzdurę, jak wpiszę adres, kliknę enter to wszytko jest ok, ale jak dam F5, to już nie... tak się dzieje tylko na operze i chrome... Jakiś pomysł od czego to może być zależne?
IProSoft
A masz pewność, że jakiś preg_match zwraca true?
bastard13
Zmodyfikuj metodę w ten sposób. Funkcjonalność taka sama, a connect() wykona się od razu. Do tego nie potrzeba Ci już atrybutu found.
  1. private static function check_regex_phone()
  2. {
  3. foreach(self::$array as $key => $value)
  4. {
  5. if(is_string($key))
  6. {
  7.  
  8. $regex = '/^'.$key.'$/';
  9.  
  10.  
  11. if(preg_match($regex, static::$text))
  12. {
  13. return self::connect();
  14. }
  15.  
  16. }
  17. else
  18. {
  19. unset($key);
  20. }
  21. }// end foreach
  22.  
  23.  
  24. $x = static::$config['default_phone'];
  25. $test = new $x;
  26. $test -> error();
  27. unset($test);
  28. } // end function check_regex_phone


Jeżeli nadal nie działa to znaczy, że żaden tekst nie pasuje do wyrażenia.
uncuncunc
Problem w tym że connect() jest wywoływany, ale kod w "else" też, nawet po tej zmianie. Gdy zakomentuje ten kawałek kodu, wszytko jest ok, nie ma błędu, ale co mam zrobić w przypadku gdy nie znajdzie porównania, więc kod musi zostać.
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.