Chciałem się zpytac jak zrobić w swoim kodzie prosty iterator np taki jak jest w PDO:
<?php foreach($pdo->query('Select ...') as $row) { } ?>
Rozumiem zasade działanie iteratora ale nie wiem jak go zrobić :?
<?php class IMAP implements Iterator { private $resIMAPConnection = null; private $strHost = 'localhost'; private $strType = 'pop3'; private $intPort = 110; private $strMailboxName = 'INBOX'; private $strUser = null; private $strPassword = null; private $intCurrentMessageId = 1; /** * Konstruktor klasy. * * @access public * @author Michał Mech <michal.mech@gmail.com> * @param string $strHost [localhost] Nazwa serwera pocztowego * @param integer $intPort [110] Numer portu * @param string $strType [pop3] Typ serwera pocztowego * @param string strMailboxName [INBOX] Nazwa skrzynko pocztowej * @param string $strUser Nazwa użytkownika * @param string $strPassword Hasło użytkownika */ public function __construct( $strHost = 'localhost', $intPort = 110, $strType = 'pop3', $strMailboxName = 'INBOX', $strUser = '', $strPassword = '' ) { $this->strHost = $strHost; $this->intPort = $intPort; $this->strType = $strType; $this->strMailboxName = $strMailboxName; $this->strUser = $strUser; $this->strPassword = $strPassword; $this->resIMAPConnection = @imap_open( '{' . $strHost . ':' . $intPort . '/'. $strType . '}' . $strMailboxName, $strUser, $strPassword ); } /** * Zwraca obiekt wiadomości. * * @access public * @author Michał Mech <michal.mech@gmail.com> * @param integer $intMessageNumber Identyfikator wiadomości * @return object Obiekt wiadomości */ public function getMessage( $intMessageNumber = 1 ) { return new IMAPMessage( $this->resIMAPConnection, $intMessageNumber ); } /** * Zwraca ilość wiadomości w skrzynce pocztowej * * @access public * @author Michał Mech <michal.mech@gmail.com> * @return integer ilość wiadomości w skrzynce pocztowej */ public function getMessagesNumber() { return (int)@imap_num_msg( $this->resIMAPConnection ); } /** * Zwraca ilość nowych wiadomości w skrzynce pocztowej * * @access public * @author Michał Mech <michal.mech@gmail.com> * @return integer ilość nowych wiadomości w skrzynce pocztowej */ public function getRecentMessagesNumber() { return (int)@imap_num_recent( $this->resIMAPConnection ); } /** * Ustawia "kursor" wiadomości na pczątku. * Przed piwerszą wiadomością. * * @access public * @author Michał Mech <michal.mech@gmail.com> */ { $this->intCurrentMessageId = $this->getMessagesNumber(); } /** * Sprawdza czy są jeszcze jakieś wiadomości * * @access public * @author Michał Mech <michal.mech@gmail.com> * @return boolean true jeśli są keszcze wiadomości, inaczej false */ function valid() { return (boolean)( $this->intCurrentMessageId > 0 ); } /** * Zwraca aktualną pozycję kursora. * * @access public * @author Michał Mech <michal.mech@gmail.com> * @return integer Identyfikator bieżącej wiadomości */ { return $this->intCurrentMessageId; } /** * Zwraca obiekt bieżącej wiadomości * * @access public * @author Michał Mech <michal.mech@gmail.com> * @return object */ { return $this->getMessage( $this->intCurrentMessageId ); } /** * Przesuwa kursor wiadomości do przodu. * * @access public * @author Michał Mech <michal.mech@gmail.com> */ { $this->intCurrentMessageId--; } /** * Destruktor klasy. * * Zamyka połączenie z serwerem pocztowym * * @author Michał Mech <michal.mech@gmail.com> * @return boolean true w razie powodzenia, false w przeciwnym przypadku */ public function __destruct() { return (boolean)@imap_close( $this->resIMAPConnection ); } } ?>