Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Anomalia w php czy moja pomyłka?
Forum PHP.pl > Forum > PHP
Orzeszekk
Witam. Natrafilem dzis na bardzo dziwny problem, w każdym razie raczej sam nie jestem sobie
w stanie z tym poradzić.

w metodzie public function getIDSignedToSubLeague($subLeagueID, $queueCount)
w wierszu echo "xxxx"
jakims cudem $this wskazuje na obiekt typu SubLeague.

Jak to mozliwe skoro subLeague i subLeagueteamsbuffer nie sa w zaden sposob ze soba zwiazane, nie dziedziczą ani nic..

problem pojawił się gdy zamienilem pare metod (min. tą) ze statycznych na dynamiczne. zmiana polegala na wykasowaniu slowka static i zamianie self:: na $this->. Jak to mozliwe ze $this wskazuje na inny obiekt niz obiekt w ktorym znajduje sie metoda skoro

10 0.2761 1071264 SubLeagueTeamsBuffer->getIDSignedToSubLeague( ) ..\SubLeague.php:158

nawet w stack trace jest wywolywana metoda z dobrego obiektu?

restartowalem kompa i nie pomoglo.

  1. class SubLeagueTeamsBuffer extends ItemsBuffer implements Singleton
  2. {
  3. static public $tableNameDeclaration = "SubLeagueTeam";
  4. /* ID jest tylko dla kompatybilnosci */
  5. static public $savingPatternDeclaration = array(array('id', FIELD_IS_INT, 'int auto_increment not null'),
  6. "subLeagueID", "teamID", "lastPosition", "score",
  7. array('queueCount', FIELD_IS_INT, _mysql_tinyint, _mysql_tinyint_range),
  8. array('teamAlreadyPlayedMatch', FIELD_IS_INT, _mysql_tinyint, _mysql_tinyint_range));
  9. /**
  10.   * Indeks
  11.   */
  12. static public $indexesDeclaration = array(
  13. array(_mysql_index_unique, 'subleg_team_queue_index', _mysql_index_algorithm_btree,
  14. array('subLeagueID', 'queueCount', 'teamID')));
  15.  
  16. /**
  17.   * Zwraca ID druzyn (a nie wpisów) danej podligi w danej kolejce
  18.   * @param unknown_type $subLeagueID
  19.   * @param unknown_type $queueCount
  20.   * @return Ambigous <multitype:, NULL, unknown>
  21.   */
  22. public function getIDSignedToSubLeague($subLeagueID, $queueCount)
  23. {
  24. /* Poniżej $this wskazuje na obiekt SubLeague (a nie jak mogłoby się wydawać SubLeagueTeamsBuffer */
  25. /* ===========> */echo "xxxx";
  26. $result = $this->executeNonBufferedQuery(
  27. "select teamID from SubLeagueTeam where subLeagueID=$subLeagueID AND queueCount=$queueCount");
  28. return $result;
  29. }
  30. /**
  31.   * Zwraca subLeagueTeam druzyn z danej podligi z danej kolejki
  32.   * @param unknown_type $subLeagueID
  33.   * @param unknown_type $queueCount
  34.   */
  35. public function getSignedToSubLeague($subLeagueID, $queueCount)
  36. {
  37. $result = $this->executeFilterQuery(
  38. "select * from SubLeagueTeam where subLeagueID=$subLeagueID AND queueCount=$queueCount");
  39. return $result;
  40. }
  41. public function moveAllPlayersFromSubLeagueToSubLeague($subLeagueFrom, $subLeagueTo)
  42. {
  43. if (!($subLeagueTo && $subLeagueFrom))
  44. {
  45. /* Puste ID podano, taka sytuacja nie powinna miec miejsca, moj blad */
  46. throw new InternalException("SubLeagueTo lub SubLeagueFrom mają zerową wartosc.");
  47. }
  48. $result = $this->executeNonBufferedQuery(
  49. "update SubLeagueTeam set SubLeagueID=$subLeagueTo where (SubLeagueID=$subLeagueFrom)");
  50. }
  51. }



  1. /**
  2.   * Metoda zwraca drużyny które są zapisane do tej subligi
  3.   */
  4. public function getSignedTeams()
  5. {
  6. /* Wystarczy zdobyć ID teamów które znajdują się w pierwszej kolejce i juz mamy liste zapisanych graczy */
  7. $idArray = SubLeagueTeamsBuffer::getIDSignedToSubLeague($this->ID, 1);
  8. if ($idArray)
  9. {
  10. /* Są podwójnie zagniezdzone trzeba je przepisac */
  11. foreach ($idArray as &$idItem)
  12. {
  13. $idItem = $idItem[0];
  14. }
  15. $result = TeamsBuffer::get()->getItems($idArray);
  16. }
  17. return $result;
  18. }


Stack trace z xdebug:
Fatal error: Call to undefined method SubLeague::executeNonBufferedQuery() in D:\Apache\NowaWersja\Scripts\Models\Buffers\SubLeagueTeamsBuffer.php on line 68

8 0.2303 1054896 SubLeague->getSignedTeamsCount( ) ..\League.php:311
9 0.2303 1054896 SubLeague->getSignedTeams( ) ..\SubLeague.php:179
10 0.2761 1071264 SubLeagueTeamsBuffer->getIDSignedToSubLeague( ) ..\SubLeague.php:158
nospor
Funkcję wywołujesz statycznie, więc nic dziwnego że $this nie odnosi się do obiektu, o którym myślisz.

I popraw tytuł na normalny a nie jakieś bzdury w nim piszesz.
Orzeszekk
faktycznie. obejrzalem wszystko a to mi umkneło:P Zaciemnienia dostałem jakiegos.

Dzięki.

po za tym to nie takie bzdury, w szanowanej ksiazce Clean Code book of agile programming jest napisane ze natężenie wtf/minutę to kryterium poprawnosci kodu ;d
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.