Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [klasa] mailing
piotrooo89
post
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




dziękuje za wszelkie porady, uwagi. zabieram się do poprawek.

proszę również o dalsze komentarze.

Odłożyłem na chwile stronicowanie, potrzeba chwili wymogła na mnie zrobienie newslettera. Nie chce zakładać kolejnego tematu więc pokaże go tu. Jest to najprostsze wysyłanie maila, tymczasowo bez nagłówków. Powiedzcie mi czy idę w dobrą stronę.

newsletter-class.php
  1. <?php
  2. class Newsletter
  3. {
  4.    public function GetMailsFromFile($file, $separator)
  5.    {
  6.        $string = file_get_contents($file);
  7.        $mails_file = explode($separator, $string);
  8.        return $mails_file;
  9.    }
  10.    public function GetMailsFromDb($sql)
  11.    {
  12.        $sql_query = mysql_query($sql);
  13.        while ($rows = mysql_fetch_row($sql_query))
  14.        {
  15.            $mails_db[] = $rows[0];
  16.        }
  17.        return $mails_db;
  18.    }
  19.    public function Send($where, $subject, $message)
  20.    {
  21.        foreach($where as $mails)
  22.        {
  23.            mail($mails, $subject, $message);
  24.        }
  25.    }
  26. }
  27. ?>


index.php
  1. <?php
  2. require_once ('newsletter-class.php');
  3. require_once ('mysql.php');
  4.  
  5. $topic = 'Test';
  6. $msg = 'Wiadomość testowa';
  7.  
  8. $sql = 'SELECT mail FROM emails';
  9.  
  10. $news = new Newsletter();
  11. $file = $news -> GetMailsFromFile('mail.txt', ';');
  12. $db = $news -> GetMailsFromDb($sql);
  13. // z pliku
  14. $news -> Send($file, $topic, $msg);
  15. //lub lub bazy
  16. $news -> Send($db, $topic, $msg);
  17. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ogólnie idziesz w dobrą stronę ale poczytaj o tym, co to jest polimorfizm i jak można go wykorzystać. Konkretnie chodzi mi o metody:
- GetMailsFromFile
- GetMailsFromDb
Generalnie nie powinno się tak robić (tworzyć osobnych metod do pobierania danych z różnych źródeł). Zdecydowanie lepiej utworzyć obiekt typu Loader, który by pobierał dane w speclajny sposób, coś na wzór:
  1. <?php
  2. abstract class Loader {
  3.    abstract public function load();
  4. }
  5.  
  6. class Loader_File extends Loader {
  7.    public function load() {
  8.        // wczytaj adresy z pliku
  9.    }
  10. }
  11.  
  12. class Loader_Database extends Loader {
  13.    public function load() {
  14.        // wczytaj adresy z bazy danych
  15.    }
  16. }
  17. ?>

Klasa Newsletter mogłaby wyglądać mniej-więcej tak:
  1. <?php
  2. class Newsletter {
  3.    private $loader;
  4.    
  5.    public function setLoader(Loader $loader) {
  6.        $this->loader = $loader;
  7.    }
  8.    
  9.    public function getMails() {
  10.        return $this->loader->load();
  11.    }
  12. }
  13. ?>

oraz wykorzystanie:
  1. <?php
  2. $obj = new Newsletter();
  3. $obj->setLoader(new Loader_File());
  4. print_r($obj->getMails());
  5. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 14:08