ФорумПрограммированиеPHP для идиотов → Class начинающего

Class начинающего

  • maxfr

    Сообщения: 545 Репутация: N Группа: Кто попало

    Spritz 13 февраля 2009 г. 10:33

    Привет Всем. Создаю тему "Class начинающего".
    Выложу сюда свой class посмотрите и покажите мне, как улучшить свой класс! Что я пишу не правильно и что можно улучшить. Вообщем прошу высказать свое мнение. ООП, как и само программирование, стал осваивать очень не давно, поэтому прощу не бить!


    // email class
    class mail{
    private $to, $mms, $fromMessa, $mail, $ot;

    function go($to, $fromMessa, $mail, $ot)
    {
    $this->mail=$mail;
    $this->to=$to;
    $this->sub=$sub;
    $this->ot=$ot;
    }


    function message($mms){
    $this->mms=$mms; // messages
    }
    function send($to, $sub, $ot)
    {

    if (preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i",$this->to))
    {
    $this->mail = mail($this->to, $this->sub, $this->mes, $this->ot);
    if (isset($this->mail)) {echo '<br/>Сообщение отправлено!';}

    }else {echo '<br/>Не отправлено.';}
    }
    }
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 13 февраля 2009 г. 11:11, спустя 37 минут 46 секунд

    1. каменты пиши. описание для всего класса, для его property и методов.
    2. в данном случае не вижу смысла функционал go и message реализовывать 2-мя ф-циями.
    выражения типа "/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i" лучше определять в константы класса, и походу для констант тоже каменты нужны
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 13 февраля 2009 г. 14:40, спустя 3 часа 29 минут 22 секунды

    какойто одноразовый класс получается если я все правильно понял. если так, то он нах не нужен. у меня тоже есть нечто подобное мейлеру, так там при создании экземпляра класса всего лишь от кого указываешь и на стройки для ответа и тп, и метод сенд, который может письма рассылать. в таком клаассе я вижу смысл, а класс чтобы просто письмо отправить имхо УГ
    Сапожник без сапог
  • maxfr

    Сообщения: 545 Репутация: N Группа: Кто попало

    Spritz 13 февраля 2009 г. 19:03, спустя 4 часа 23 минуты 9 секунд

    Вот исправил в соответсвиями с замечаниями

    Код
    // -=email class=- 
    class mail
    {
    // description vars
    //'example: to='[email protected]' | m_Messa='messaga' |  fromMessa='From:[email protected]' | theme='tema'  
    private
     $to, // komy mail
     $m_Messa, // message
     $fromMessa, // ot kogo meassage
     $mail,  
     $theme;// tema mail
    // constant temp_mail - proverka mail
    const temp_mail="/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i";
    // messages
    function message($m_Messa)
    {
     $this->m_Messa=$m_Messa;
     $this->mail=$mail;
    }
    // function send mail
    function send($to, $theme, $fromMessa)
    {
     $this->to=$to;
     $this->theme=$theme;
     $this->ot=$fromMessa;
     if (preg_match(self::temp_mail, $this->to)){
    $this->mail = mail($this->to, $this->theme, $this->m_Messa, $this->fromMessa);
    if (isset($this->mail)) {echo '<br/>Сообщение отправлено!';}
     }else {echo '<br/>Не отправлено.';}
    }
    }


    Просьбы выразить повторно свое мнение и направить на правильный путь…
    По поводу 2-го комента понимаю что класс наверное мало применим. Если можно то мне бы хотелось попробовать написать что-то нужно. Просьба натолкнуть…на мысль
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 13 февраля 2009 г. 20:02, спустя 58 минут 54 секунды

    класс надо создавать не ради создания класса, а для удобного решения конкретных задач, по мере их появления.. инче фигня получается)


    каменты не внятные. попробуй представить что ты видишь этот код 1-й раз.
    нет стандарта именования свойств: to, fromMessa, theme, m_Messa - всё по-разному, почему бы не именовать сходные вещи однотипно? mailTo, maleFrom, mailTheme, mailMessage..



    "if (isset($this->mail))" будет всегда истинно, ты $this->mail определил строкой выше
  • maxfr

    Сообщения: 545 Репутация: N Группа: Кто попало

    Spritz 13 февраля 2009 г. 20:09, спустя 7 минут 12 секунд


    mailTo, maleFrom, mailTheme, mailMessage.. - эти переменные гараздо красивше.(Я не понял что от меня вы хотели чтоб я сделал с переменными.)
    Проверку уберу, коменты подправлю. Я новичек очень хочу что-нить написать дельное, направьте в правильное русло что актуально?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 13 февраля 2009 г. 20:17, спустя 7 минут 39 секунд


    Я не понял что от меня вы хотели чтоб я сделал с переменными.

    просто переименовал их :)

    не надо ориентироваться на актуальное. напиши чо-нибудь простое.
    http://pyha.ru/forum/topic/1960.0 - почитай статейку
  • DDoSяН

    Сообщения: 232 Репутация: N Группа: Кто попало

    Spritz 14 февраля 2009 г. 5:31, спустя 9 часов 14 минут 10 секунд

    Нафига для mail,класс создавать?
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 14 февраля 2009 г. 5:51, спустя 20 минут 2 секунды



    mailTo, maleFrom, mailTheme, mailMessage.. - эти переменные гараздо красивше.(Я не понял что от меня вы хотели чтоб я сделал с переменными.)
    Проверку уберу, коменты подправлю. Я новичек очень хочу что-нить написать дельное, направьте в правильное русло что актуально?


    А ты теперь попробуй, расширить свой класс. Пусть отправляет сообщения на несколько email`ов, которые ты хранишь например в emails.txt файле.
    Сделай метод findMails(), который собирает email`ы с сайтов и записывает в тот же emails.txt. Добавь, возможность прикреплять файлы, простым методом addFile() и когда сделаешь это скажи. Много вопросов отпадет сразу.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 14 февраля 2009 г. 5:52, спустя 31 секунду

    И код выложи
  • maxfr

    Сообщения: 545 Репутация: N Группа: Кто попало

    Spritz 24 февраля 2009 г. 2:32, спустя 9 дней 20 часов 40 минут

    Прошу прощения только увидел тут посл посты.

    Выкладываю код 1-части задания
    Сделай метод findMails(), который собирает email`ы с сайтов и записывает в тот же emails.txt



    ……
    // constant temp_mail - proverka mail
    const SHABLON_MAIL="/([0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3})/i";
    function __construct(){
    $this->temp=$temp;
    $this->searchEmail=$searchEmail;
    }
    // method findMails()
    function findMails($fileName, $adressEmail)
    {
    $this->adressEmail=$adressEmail;
    $this->fileName = $fileName;
    $this->mail = file_get_contents($this->adressEmail);
    $this->searchEmail = preg_replace(self::SHABLON_MAIL, "<font color='red'>$1</font>", $this->mail);
    if ( is_readable($this->fileName) )
    {
    // Открыть файл и установить указатель текущей позиции в конец файла
    $this->temp = fopen($this->fileName, "a+");
    // запись в файл
    fwrite($this->temp, $this->searchEmail);
    // закрытие файла
    fclose($this->temp);
    }
    else { print "$filename is not readable!";}
    }


    Приминение, конечно же ту.

    <?php
    $mail = new mail();
    $mail->findMails('email.txt', 'http://site.ru/index.html');
    ?>


    2-й части задания
    Добавь, возможность прикреплять файлы, простым методом addFile()
     не понял! (Наверное уже просто поздно.)
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 26 февраля 2009 г. 4:39, спустя 2 дня 2 часа 7 минут



    2-й части задания
    Добавь, возможность прикреплять файлы, простым методом addFile()
     не понял! (Наверное уже просто поздно.)


    В смысле прикреплять к message, что бы отсылать не только сообщения но и файлы =) Но это уже так




    <?php
    $mail = new mail();
    $mail->findMails('email.txt', 'http://site.ru/index.html');
    ?>




    Теперь бы еще метод отправки писем с этого файла. $mail->sendMails($message, 'email.txt');
  • maxfr

    Сообщения: 545 Репутация: N Группа: Кто попало

    Spritz 26 февраля 2009 г. 13:41, спустя 9 часов 1 минуту 35 секунд

    Теперь в студии и отправка писем с помощью sendMail();


    // метод для отправки письма
    function sendMail($mailMessage, $fileName, $mailTheme, $mailFrom)
    {
    $this->mailTo=$mailTo; // кому письмо
    $this->mailTheme=$mailTheme; // тема письма
    $this->mailMessage = $mailMessage; // само письмо
    $this->fileName=$fileName; // файл с перечислинными адресами почт
    $this->mailTo = file_get_contents($this->fileName);
    if (preg_match(self::SHABLON_MAIL, $this->mailTo))
    {
    $this->mail = mail($this->mailTo, $this->mailTheme, $this->mailMessage);
    }
    }


    Ну и конечно же пример использования класса.

    include_once 'cls/class.php';

    $mail = new mail();
    $mail->sendMail("Люблю пыху.", 'email.txt', 'Пыха', '[email protected]');
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 27 февраля 2009 г. 9:46, спустя 20 часов 5 минут 3 секунды


    Теперь в студии и отправка писем с помощью sendMail();



    $this->mailTo=$mailTo; // кому письмо
    $this->mailTheme=$mailTheme; // тема письма
    $this->mailMessage = $mailMessage; // само письмо
    $this->fileName=$fileName; // файл с перечислинными адресами почт
    $this->mailTo = file_get_contents($this->fileName);
    if (preg_match(self::SHABLON_MAIL, $this->mailTo))
    {
    $this->mail = mail($this->mailTo, $this->mailTheme, $this->mailMessage);
    }



    Только теперь не понимаю, зачем тогда нужны вообще $this->mailTo, $this->mailTheme, $this->mailTo ?
  • maxfr

    Сообщения: 545 Репутация: N Группа: Кто попало

    Spritz 27 февраля 2009 г. 9:55, спустя 8 минут 59 секунд


    Только теперь не понимаю, зачем тогда нужны вообще $this->mailTo, $this->mailTheme, $this->mailTo ?


    Ну как же.
    $this->mailTheme // тема сообщений
    она вообще не нужна, т.е. это необязат. параметр (я удалил вообще)


    $this->mail = mail($this->fileName, $this->mailTheme, $this->mailMessage);
    /* и удалим  $this->mailTo = file_get_contents($this->fileName); */


Пожалуйста, авторизуйтесь, чтобы написать комментарий!