Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zmiana strukturalny->obiektowy
Forum PHP.pl > Forum > Przedszkole
Wolfie
Witam

Jestem poczatkujacy w php a takze w programowaniu obiketowym.
Mam strukturalny skrypt ktory wyglada tak :

  1. <?php
  2.  
  3.        $mailbox = "{imap.gmail.com:993/imap/ssl}INBOX";
  4.        $user = "jakisuser@gmail.com";
  5.        $pass = "jakieshaslo";
  6.  
  7.        $mbox = imap_open ($mailbox, $user, $pass)
  8.        or die("can't connect: " . imap_last_error());
  9.  
  10.  
  11.        echo "<h1>Mailboxes</h1>\n";
  12.        $folders = imap_listmailbox($mbox, "{imap.gmail.com:993}", "*");
  13.  
  14.        if ($folders == false) {
  15.            echo "Call failed<br />\n";
  16.        } else {
  17.            foreach ($folders as $val) {
  18.                echo $val . "<br />\n";
  19.            }
  20.        }
  21.  
  22.        echo "<h1>Headers in INBOX</h1>\n";
  23.        $headers = imap_headers($mbox);
  24.  
  25.        if ($headers == false) {
  26.        echo "Call failed<br />\n";
  27.        } else {
  28.            foreach ($headers as $val) {
  29.                echo $val . "<br />\n";
  30.            }
  31.        }
  32.  
  33.        $num = array(1,2,3);
  34.        $numC = count($num);
  35.  
  36.        echo '<h1>Body of specified message</h1>';
  37.        for ($i = 0; $i < $numC; ++$i)
  38.        {
  39.        $body = imap_body($mbox, $num[$i]);
  40.  
  41.        if ($body == false) {
  42.            echo 'Call failed (' . $num[$i] . ')<br />';
  43.        }
  44.        else
  45.            echo $body;
  46.        }
  47.  
  48.        imap_close($mbox)
  49.  
  50.  
  51.        ?>


Ale chce go przerobic na kod obiektowy
Powiedzmy ze na poczatek chcialbym tylko polaczyc sie do serwera i wyswietlic headery
Moje proby wygladaja tak :
  1. <?
  2.  
  3. class Mailbox
  4.    {
  5.        protected $_connection = null;
  6.        
  7.        public function connect($server, $user, $pass, $port = 993, $protocol = 'imap')
  8.            {
  9.                if(!($this->_connection = imap_open('{'.$server.':'.$port.'/'.$protocol.'/ssl}INBOX')))
  10.                    throw new Exception ('Connection failure');
  11.            }
  12.        
  13.        public function show_headers()
  14.            {
  15.                echo "<h1>Headers in INBOX</h1>\n";
  16.                $this->_headers = imap_headers($_connection);
  17.                
  18.                if ($this->_headers == false)
  19.                    {
  20.                    echo "Call failed<br />\n";
  21.                    }
  22.                else
  23.                    {
  24.                    foreach ($_headers as $val)
  25.                        {
  26.                        echo $val . "<br />\n";
  27.                        }
  28.                    }
  29.            }
  30.    }
  31.  
  32.    
  33. $mailbox = new Mailbox;
  34. $mailbox->connect(gmail.com,jakisuser@gmail.com,jakieshaslo,993,imap);
  35. $mailbox->show_headers;    
  36. ?>


Wywala mi błąd :
Cytat
syntax error, unexpected '@' in C:\Program Files\WebServ\httpd\OOP\OOP\Mailbox.php on line 34

czyli bład w tej linijce :
$mailbox->connect(gmail.com,jakisuser@gmail.com,jakieshaslo,993,imap);


Jak mam sobie z tym poradzic ?
No i czy ogolnie struktura mojego programu obiektowego jest poprawnie napisana ? Co nalezaloby poprawic ?
Kolejna rzecza jest ze oczywiscie bede chcial do tego zrobic stronke aby mozna bylo podawac dane uzywtkowinka i halo zanim informacje zostana przeslane do skryptu php.....prosze o podpowiedzi.
Ramadisu
Kod
connect('gmail.com','jakisuser@gmail.com','jakieshaslo'...
Wolfie
Juz tak probowalem:

Wywala nastepujacy blad :
Cytat
Warning: Wrong parameter count for imap_open() in C:\Program Files\WebServ\httpd\OOP\OOP\Mailbox.php on line 9

Fatal error: Uncaught exception 'Exception' with message 'Connection failure' in C:\Program Files\WebServ\httpd\OOP\OOP\Mailbox.php:10 Stack trace: #0 C:\Program Files\WebServ\httpd\OOP\OOP\Mailbox.php(34): Mailbox->connect('gmail.com', 'jakisuser@gm...', 'jakieshaslo', '993', 'imap') #1 {main} thrown in C:\Program Files\WebServ\httpd\OOP\OOP\Mailbox.php on line 10
wookieb
A listę argumentów funkcji imap_open patrzał?
http://pl.php.net/imap_open
Wolfie
Patrzal....ale nic mi to nie mowi.....jak zaznaczylem wczesniej jestem poczatkujacy......

Zreszta probowalem takiego zapisu :

  1. <?php
  2. $user = "jakisuser@gmail.com"
  3. ?>


I tez cos jest nie tak.....
Nie orientuje sie zbytnio w prog obiektowym dlatego napisalem ten post , jakby spojrzenie w funkcje imap_open dalo mi odpowiedz nie pisalbym tutaj......
wookieb
poczatkujacy to nie znaczy, że masz nie znac podstaw czytania manuala. Policz sobie ile ty dajesz argumentów w funkcji imap_open a ile jest w manualu.

No przecież teraz zapis twoich zmiennych jest dobry. A błąd dotyczy imap_open...
"Wrong parameter count for imap_open()" = Zła liczba argumentów dla imap_open...

Poza tym kolejny błąd.
Kod
$this->_headers = imap_headers($this->_connection);
Wolfie
Masz racje. Ale mogles od razu powiedziec w czym rzecz a nie odsylasz mnie do manuala.....
Niedopatrzenie z mojej strony , nie przeczytalem dokladnie komunikatu - dzieki.

Poprawilem kod ale teraz mam problem z wyswietlaniem.

Tu kod odpowiedzialny za wyswietlanie

  1. <?
  2. public function show_headers()
  3.            {
  4.                echo "<h1>Headers in INBOX</h1>\n";
  5.                $this->_headers = imap_headers($_connection);
  6.                
  7.                if ($_headers == false)
  8.                    {
  9.                    echo "Call failed<br />\n";
  10.                    }
  11.                else
  12.                    {
  13.                    foreach ($_headers as $val)
  14.                        {
  15.                        echo $val . "<br />\n";
  16.                        }
  17.                    }
  18.            }
  19.    }
  20.  
  21.    
  22. $mailbox = new Mailbox;
  23. $mailbox->connect('gmail.com','jakisuser@gmail.com','jakieshaslo','993','imap');
  24. $mailbox->show_headers();    
  25. ?>


A tutaj komunikat :
Cytat
Warning: imap_headers(): supplied argument is not a valid imap resource in C:\Program Files\WebServ\httpd\OOP\OOP\Mailbox.php on line 16
Call failed


Oczywiscie manual przegladalem - imap_headers musze wywolac z parametrem imap_open czyli $_connection w moim przypadku jezeli wszystko dobrze rozumiem wiec nie wiem dlaczego wystepuje blad.....
wookieb
Cytat
Masz racje. Ale mogles od razu powiedziec w czym rzecz a nie odsylasz mnie do manuala.....

Pewnie, że będe odsyłał smile.gif Samodzielność przede wszystkim smile.gif

A widzisz roznice pomiedzy $this->_headers a $_headers?
Wolfie
Tak roznice widze....dlatego edytowalem post ktory znajduje sie nad Twoim smile.gif
wookieb
Przeczytaj mój post numer 6. I pamiętaj o $this
Wolfie
Super smile.gif
Teraz wszystko dziala , dzieki laugh.gif

To teraz jeszcze pytanko ktore napisalem na poczatku....
Jezeli napisze sobie funkcje ktora bedzie usuwac maile to jak wywolywac taka funkcje za pomoca html czy javascript?

Bo przeciez chce aby uzytkownik cos z tymi danymi byl w stanie zrobic , nie tylko je ogladac.....
erix
Zrób sobie w konstruktorze sprawdzanie akcji - a ją samą przekazuj przez $_GET.
Wolfie
Ok.
Wiem co to jest konstruktor i metoda $_GET ale jak sprawdzic akcje to juz dla mnie zagadka.....szczerze mowiac nie wiem o czym mowisz.....
erix
No patrz, najprościej:
  1. <?php
  2. class asd{
  3.  
  4.    function __construct(){
  5.        $action = empty($_GET['action']) ? '' : $_GET['action'];
  6.    
  7.        switch($action){
  8.            case 'akcja1':
  9.                // szukaj krasnoludków
  10.            break;
  11.            
  12.            case 'akcja2':
  13.                // kop dół
  14.            break;
  15.            
  16.            case 'akcja3':
  17.                // lep garnki
  18.            break;
  19.            
  20.            default:
  21.                //wolne ;)
  22.        }
  23.    
  24.    }
  25.  
  26. }
  27. ?>


A wywołanie? skrypt.php?action=akcja1, skrypt.php?action=akcja2, itp.
Wolfie
Czy to ma moze jakis zwiazek z wzrocem MVC ?
Bo chce napisac wlasnie aplikacje zgodna z tym wzorcem , oczywiscie obiektowo.
Czy to jest plik kontrolera ?
erix
To może być np. kontroler. Ale nie pytaj nas o takie rzeczy, o których już naprawdę wiele powiedziano...
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.