![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Hej
![]() Jakiś czas temu, zamówiłem książkę o OOP, trochę poczytałem i zacząłem praktykę. Stworzyłem sobie klasę mail która wysyła maila, i użyłem w niej konstruktora, i chciałem się dowiedzieć, czy dobrze myślę odnośnie tworzenia klas i użycia konstruktora w nich. Oto kod:
Proszę o opinie, w szczególności czy mój tok rozumowania odnośnie tworzenia klas i używania w nich konstruktora jest dobry. Wiem że dla Was, napisanie takiej klasy to pikuś, ale dopiero raczkuje w OOP i chciałbym poznać waszą opinię. Ten post edytował ExPlOiT 19.04.2009, 21:40:06 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@belliash: nie musi.
@ExPlOiT: całkiem zgrabnie jak na początek, ale kilka uwag się znajdzie. Po pierwsze, może być kilku odbiorców, a ty tego nie wziąłeś pod uwagę. Po drugie mógłbyś wydzielić wysyłanie maila np. do osobnej klasy lub poprzez dziedziczenie.
Wiem, że na początek to dużo po wprowadzam rzeczy z którymi niekoniecznie jesteś zaznajomiony, ale w ten sposób od początku nauczysz się dobrych praktyk. Ten post edytował LBO 19.04.2009, 22:06:06 |
|
|
![]()
Post
#3
|
|
![]() Newsman Grupa: Moderatorzy Postów: 4 005 Pomógł: 548 Dołączył: 7.04.2008 Skąd: Trzebinia/Kraków ![]() |
a ja to rozwiązałem tak:
Temat: klasa_mailing tylko wydaje mi się że trochę nie o to chodzi bo ty na sztywno podajesz maile a ja je dynamicznie wczytuje. -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@LBO: wiem ze nie musi - domyslnie przyjmowane jest jako public... ale jak pisac to pisac wszedzie albo nigdzie. ![]() Ale to już kwestia standardów kodowania a nie poprawnej konstrukcji klasy. tylko wydaje mi się że trochę nie o to chodzi bo ty na sztywno podajesz maile a ja je dynamicznie wczytuje. Mailing (wysyłka do subskrybentów) )a mailer (mechanizm wysyłania maila) to dwie rożne rzeczy i nie powinieneś Ich mieszać. Skłaniałbym się do wykorzystania obiektów mail wewnątrz klasy mailera. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za uwagi. Ta klasa ma obsłużyć wysyłanie do mnie maila z formularza kontaktowego, czyli będzie jeden odbiorca. Bo w przypadku gdyby było kilku odbiorców mógłbym to tak zrobić:
Oczywiście o ile dobrze myślę. I np w wczytać listę odbiorców z pliku txt Ten post edytował ExPlOiT 19.04.2009, 22:28:22 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Rada: jak najszybciej porzuć polskie nazewnictwo w kodzie
@LBO: Jak rozumiem chciałeś pokazać możliwość uzyskania kilku dróg wysłania maila, przez: mail(), smtp, cokolwiek innego. Tylko wtedy klasa MailSender nie może dziedziczyć po Mail - to by bez sensu było przecież. ![]() Oczywiście to tylko szkielet z najbardziej podstawowymi metodami. Zauważ że taka konstrukcja umożliwia Ci masowe wysyłanie dwóch rodzajów maili: 1) Wielu adresatów, jedna treść: wtedy tworzysz jeden Mail, jeden MailSender a wielu adresatów obsługujesz poprzez podanie wielu maili w pierwszym parametrze mail() (więcej w manualu) 2) Wielu adresatów, dla każdego inna treść: wtedy tworzysz kilka obiektów Mail i poprzez MailSeneder::addMail() (tutaj nie pokazanej) wielokrotnie (w pętli) wykonujesz całe wysyłanie |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@LBO: Jak rozumiem chciałeś pokazać możliwość uzyskania kilku dróg wysłania maila, przez: mail(), smtp, cokolwiek innego. Tylko wtedy klasa MailSender nie może dziedziczyć po Mail - to by bez sensu było przecież. ![]() A czytałeś dołączony kod? Napisałem wyraźnie dziedziczenie ALBO dodatkowy obiekt. Pozdrawiam ![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Czytałem, to albo też - tyle że z dziedziczeniem to zły pomysł - z dodatkowym obiektem jak najbardziej - dlatego się "czepiam".
![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Czytałem, to albo też - tyle że z dziedziczeniem to zły pomysł - z dodatkowym obiektem jak najbardziej - dlatego się "czepiam". ![]() a Czemu zły? Ile razy Ci się zdarza zmieniać silnik wysyłający maile? Fakt, wydzielenie obiektu wysyłającego jest elastyczne, ale wcale nie znaczy, że potrzebne. Czasami to zwykłe komplikowanie kodu.
I też bangla. edit: mały błędzik był ![]() Ten post edytował LBO 20.04.2009, 08:38:27 |
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
a Czemu zły? Ile razy Ci się zdarza zmieniać silnik wysyłający maile? Bardzo często w środowisku deweloperskim masz inny mechanizm do wysyłki maili.Fakt, wydzielenie obiektu wysyłającego jest elastyczne, ale wcale nie znaczy, że potrzebne. Czasami to zwykłe komplikowanie kodu. Że już nie wspomnę o testowaniu aplikacji. Podczas nich często zdarza się zmieniać silnik wysyłający maile. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Crozin) Rada: jak najszybciej porzuć polskie nazewnictwo w kodzie A to dlaczego? No więc tak tutaj jest część kodu odpowiedzialna za dodanie adresata/adresu:
I jak zrobić to żeby, wczytać wszystkie maile i wysłać do każdego? Bo wczoraj napisałem kod który wczytuje, ale wysyłał tylko do jednej osoby, i kod wyglądał tak:
Domyślam się, że gdzieś popełniłem pewnie parę błędów. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat A to dlaczego? 1) Estetyka. Języki prog. same w sobie stosują ang. nazewnictwo (function, class, new, this, switch itp.) a mieszanie dwóch języków wygląda paskudnie:Kod private function mojaFunkcja(Iterator $parametr) 2) Kod pisany po polsku zrozumiały jest dla może kilkuset tysięcy osób - Polacy mający jakieś pojęcie o prog. Kod pisany po angielsku jest dostępny dla iluś tam milionów 3) Wszystkie dokumentacje etc. pisane są pierwotnie po angielsku. Funkcja mail() może przyjąć jako pierwszy argument całą listę adresów mailowych na które ma wysłać maila - zobacz w manualu. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
a może lepiej nieco to uprościć, po co się męczyć i za każdym razem pisać $mail->ustawCośtam? $mail=new mail('nadawca@wp.pl', 'biuro@cos.pl', 'Temat testowy', 'przykladowa tresc'); $mail->wyslijMaila(); tak łatwiej, lepiej i bardziej "obiektowo". W końcu do tego służą konstruktory. A jak będziesz miał kilku odbiorców to możesz przecież ich podać też w konstruktorze jako tablicę: $odbiorcy = array('prezydent@polska.gov', 'premier@sejm.pl', 'ciocia_jadzia@gmail.com'); $mail=new mail('nadawca@wp.pl', $odbiorcy, 'Temat testowy', 'przykladowa tresc'); $mail->wyslijMaila(); a w funkcji wyslijMaila sprawdzasz czy $odbiorca jest tablica is_array($this->odbiorca) , i jak tak to przelatujesz foreach, a jak nie to wysyłaś tylko do jednego odbiorcy. Proste i elastyczne. Po wywaleniu funkcji dostępowych twoja klasa wydaje się dużo mniejsza i bardziej przejrzysta. A jeżeli jednak nie odpowiada Ci podawanie danych w konstruktorze (bo na przykład masz zamiar modyfikować twojego maila zanim go wyślesz) to poczytaj o metodach magicznych __set i __get http://www.php.rk.edu.pl/w/p/metody-magiczne/
No ale albo robisz zmienną $temat (i inne) publiczne, albo robisz prywatne i dopiero wtedy potrzebujesz metod dostępowych typu ustawTemat. Przecież jak masz public to możesz się normalnie, bez żadnych funkcji odwoływać do tych zmiennych poprzez $mail->temat = "dzieńdobry ciociu" w dowolnym miejscu kodu, o ile stworzyłeś wcześniej ten obiekt. Z tym, że takie "upublicznianie danych" nie jest wcale zalecane w programowaniu obiektowym i dlatego w trosce o prywatność obiektów robi się zmienne prywatne (private zamiast public przed nazwą ) conajwyżej udostępniając publiczną "metodę dostępową". Co najwyżej, bo czasami jest to zbyteczne. Na przykład jeśli treść danego maila się nie będzie zmieniała, tylko raz przypiszesz i już to równie dobrze można to umieścić w konstruktorze i już nie męczyć się i obiektu ![]() Cytat Proszę o opinie, w szczególności czy mój tok rozumowania odnośnie tworzenia klas i używania w nich konstruktora jest dobry. Wiem że dla Was, napisanie takiej klasy to pikuś, ale dopiero raczkuje w OOP i chciałbym poznać waszą opinię. Hmm... ja bym powiedział, że za dużo się napatrzyłeś w czyjś kod i przykłady, a brakuje Ci teoretycznego zrozumienia ![]() ![]() Ten post edytował PrinceOfPersia 21.04.2009, 15:49:56 -------------------- |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Bardzo często w środowisku deweloperskim masz inny mechanizm do wysyłki maili. Że już nie wspomnę o testowaniu aplikacji. Podczas nich często zdarza się zmieniać silnik wysyłający maile. Hej mike, piszesz o mockowaniu obiektów? To rozumiem i się zgadzam. Bardziej mi chodziło o podmianę sendera w czasie działania skryptu, bo przy takim bzdeciku nie widzę za bardzo innego zastosowania. A tak nadal podtrzymuje moje dalsze słowa (których już nie skomentowałeś ;P) Cytat Fakt, wydzielenie obiektu wysyłającego jest elastyczne, ale wcale nie znaczy, że potrzebne. Czasami to zwykłe komplikowanie kodu.
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Ja lubie zaczynac pisanie klas od drugiej strony, czyli od jej uzywania, potrzebujesz wyslac mailing do 1000 userow, kazdy dostanie ten sam email.
a teraz stworz klasy ktore to wykonaja. Dzieki temu stworzysz cos czego potrzebujesz, i cos co robi to czego pragniesz. Nie bedziesz dopisywal 100tek metod ktorych nigdy nie uzyjesz (no chyba ze piszesz uniwersalna biblioteke - ale, tu masz uniwersalne potrzeby). Potem okaze sie ze potrzebujesz czegos jezszce - poprawiasz, itd. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 1 173 Pomógł: 121 Dołączył: 24.09.2007 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Cytat(PrinceOfPersia) Hmm... ja bym powiedział, że za dużo się napatrzyłeś w czyjś kod i przykłady, a brakuje Ci teoretycznego zrozumienia ![]() ![]() No właśnie, bo w książce mało co jest napisane o przykładach. dr_bonzo dzięki, może uda mi się coś wykombinować, z tego co widzę to będę musiał napisać dwie klasy: EmailSender I napewno będę musiał zastosować dziedziczenie ![]() PrinceOfPersia z OOP mam jak narazie małe doświadczenie, a więc komplikuje sobie wszystko jak mogę ![]() Crozin masz rację z tym nazewnictwem, mam znajomego programistę i to samo mówił o nazewnictwie co Ty Ten post edytował ExPlOiT 22.04.2009, 22:59:40 |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat I napewno będę musiał zastosować dziedziczenie Tylko nie zrób telefonistki dziedziczącej po telefonie
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 23:16 |