Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: iteratory - jak to zrobić ?
Forum PHP.pl > Forum > PHP > Object-oriented programming
Apo
Witam
Chciałem się zpytac jak zrobić w swoim kodzie prosty iterator np taki jak jest w PDO:

  1. <?php
  2. foreach($pdo->query('Select ...') as $row)
  3. {
  4. }
  5. ?>


Rozumiem zasade działanie iteratora ale nie wiem jak go zrobić :?
mike
Musisz napisać klasę, która implementuje po klasie Iterator i napisać odpowiednie metody.

Masz szybki przykład bez wnikania w szczegóły:
  1. <?php
  2.  
  3. class IMAP implements Iterator
  4. {
  5. private $resIMAPConnection = null;
  6.  
  7. private $strHost = 'localhost';
  8. private $strType = 'pop3';
  9. private $intPort = 110;
  10. private $strMailboxName = 'INBOX';
  11. private $strUser = null;
  12. private $strPassword = null;
  13.  
  14. private $intCurrentMessageId = 1;
  15.  
  16. /**
  17.  * Konstruktor klasy.
  18.  * 
  19.  * @access public
  20.  * @author Michał Mech <michal.mech@gmail.com>
  21.  * @param string $strHost  [localhost] Nazwa serwera pocztowego
  22.  * @param integer $intPort  [110]  Numer portu
  23.  * @param string $strType  [pop3] Typ serwera pocztowego
  24.  * @param string strMailboxName [INBOX]  Nazwa skrzynko pocztowej
  25.  * @param string $strUser  Nazwa użytkownika
  26.  * @param string $strPassword  Hasło użytkownika
  27.  */
  28. public function __construct( $strHost = 'localhost', $intPort = 110, $strType = 'pop3', $strMailboxName = 'INBOX', $strUser = '', $strPassword = '' )
  29. {
  30. $this->strHost = $strHost;
  31. $this->intPort = $intPort;
  32. $this->strType = $strType;
  33. $this->strMailboxName = $strMailboxName;
  34. $this->strUser = $strUser;
  35. $this->strPassword = $strPassword;
  36.  
  37. $this->resIMAPConnection = @imap_open( '{' . $strHost . ':' . $intPort . '/'. $strType . '}' . $strMailboxName, $strUser, $strPassword );
  38. }
  39.  
  40. /**
  41.  * Zwraca obiekt wiadomości.
  42.  * 
  43.  * @access public
  44.  * @author Michał Mech <michal.mech@gmail.com>
  45.  * @param integer $intMessageNumber Identyfikator wiadomości
  46.  * @return object Obiekt wiadomości
  47.  */
  48. public function getMessage( $intMessageNumber = 1 )
  49. {
  50. return new IMAPMessage( $this->resIMAPConnection, $intMessageNumber );
  51. }
  52.  
  53. /**
  54.  * Zwraca ilość wiadomości w skrzynce pocztowej
  55.  * 
  56.  * @access public
  57.  * @author Michał Mech <michal.mech@gmail.com>
  58.  * @return integer ilość wiadomości w skrzynce pocztowej
  59.  */
  60. public function getMessagesNumber()
  61. {
  62. return (int)@imap_num_msg( $this->resIMAPConnection );
  63. }
  64.  
  65. /**
  66.  * Zwraca ilość nowych wiadomości w skrzynce pocztowej
  67.  * 
  68.  * @access public
  69.  * @author Michał Mech <michal.mech@gmail.com>
  70.  * @return integer ilość nowych wiadomości w skrzynce pocztowej
  71.  */
  72. public function getRecentMessagesNumber()
  73. {
  74. return (int)@imap_num_recent( $this->resIMAPConnection );
  75. }
  76.  
  77. /**
  78.  * Ustawia "kursor" wiadomości na pczątku.
  79.  * Przed piwerszą wiadomością.
  80.  * 
  81.  * @access public
  82.  * @author Michał Mech <michal.mech@gmail.com>
  83.  */
  84. function rewind()
  85. {
  86. $this->intCurrentMessageId = $this->getMessagesNumber();
  87. }
  88.  
  89. /**
  90.  * Sprawdza czy są jeszcze jakieś wiadomości
  91.  * 
  92.  * @access public
  93.  * @author Michał Mech <michal.mech@gmail.com>
  94.  * @return boolean true jeśli są keszcze wiadomości, inaczej false
  95.  */
  96. function valid()
  97. {
  98. return (boolean)( $this->intCurrentMessageId > 0 );
  99. }
  100.  
  101. /**
  102.  * Zwraca aktualną pozycję kursora.
  103.  * 
  104.  * @access public
  105.  * @author Michał Mech <michal.mech@gmail.com>
  106.  * @return integer Identyfikator bieżącej wiadomości
  107.  */
  108. function key()
  109. {
  110. return $this->intCurrentMessageId;
  111. }
  112.  
  113. /**
  114.  * Zwraca obiekt bieżącej wiadomości
  115.  * 
  116.  * @access public
  117.  * @author Michał Mech <michal.mech@gmail.com>
  118.  * @return object
  119.  */
  120. function current()
  121. {
  122.  return $this->getMessage( $this->intCurrentMessageId );
  123. }
  124.  
  125. /**
  126.  * Przesuwa kursor wiadomości do przodu.
  127.  * 
  128.  * @access public
  129.  * @author Michał Mech <michal.mech@gmail.com>
  130.  */
  131. function next()
  132. {
  133. $this->intCurrentMessageId--;
  134. }
  135.  
  136. /**
  137.  * Destruktor klasy.
  138.  * 
  139.  * Zamyka połączenie z serwerem pocztowym
  140.  * 
  141.  * @author Michał Mech <michal.mech@gmail.com>
  142.  * @return boolean true w razie powodzenia, false w przeciwnym przypadku
  143.  */
  144. public function __destruct()
  145. {
  146. return (boolean)@imap_close( $this->resIMAPConnection );
  147. }
  148. }
  149.  
  150. ?>
Ludvik
Polecam zaglądnąć do dokumentacji Standard php Library.
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.