Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy ta klasa jest dobra?
Forum PHP.pl > Forum > PHP > Object-oriented programming
alex011251
  1. <?php
  2. class classSecurityBasicAuth {
  3. public $zmienna = '';
  4. public function __construct($url, $komunikat) {
  5. $handle = curl_init($url);
  6. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  7. curl_setopt($handle, CURLOPT_NOBODY, true);
  8. curl_exec($handle);
  9.  
  10. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  11. if ($httpCode == 200) {
  12. $this -> zmienna = '<img src="'.$url.'" />';
  13. } else {
  14. $this -> zmienna = $komunikat;
  15. }
  16. curl_close();
  17. }
  18. public function funkcja() {
  19. return $this->zmienna;
  20. }
  21. }
  22.  
  23.  
  24.  
  25.  
  26. $security = new classSecurityBasicAuth('http://c.allegrostatic.pl/images/velalayout/434de666.allegro-logo.png', '<img src= "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Nie_istnieje.svg/100px-Nie_istnieje.svg.png"/>');
  27. echo $security->funkcja();
  28. ?>



Uprzedzam. Chodzi czy dobrze konstruuje tongue.gifP Bo ucze sie dopiero
Dipter
1. Co konkretnie chcesz osiągnąć, jakie zadanie ma pełnić ta klasa?
2. Jakie odniesienie ma nazwa klasy do tego co jest w środku?
alex011251
Klasa blokuje dodawanie "lewych" linkow. BaiscAuth - nazwa komunikatu gdy grafika zabezpieczona smile.gif. Wiec nazwa adekwatna.

Jak ktos skorzyst z tagu img na forach to to ma sprawdzac czy nie jest lewa grafika. Badz jakis url czy cos jezeli korzysta z innego tagu typu flash itp

Obiekt musze bardziej przystosowac by spelnial funkcje. To jest fakt
Dipter
Mimo wszystko nadal nie przekonuje mnie nazwa tej klasy, zwłaszcza przedrostek "class".

Co do samego kodu:
  1. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  2.  
  3. if ($httpCode == 200) {
  4. $this -> zmienna = '<img src="'.$url.'" />';
  5. } else {
  6. $this -> zmienna = $komunikat;
  7. }

Właściwie to nic nie powinieneś opakowywać w HTML i ogólny zarys wyświetlania danego komunikatu/błędu. Klasa raczej powinna sprawdzać czy faktycznie link jest obrazkiem i zwracać true/false - do tego oczywiście odpowiednia metoda. Dlatego też na zewnątrz powinieneś się tym wynikiem posłużyć i wtedy wyświetlić komunikat, przekierować czy cokolwiek innego.

  1. public function funkcja() {
  2. return $this->zmienna;
  3. }

Niestety nie mówi to zbyt wiele, jedynie po zapisie można stwierdzić, że "zmienna" zostanie zwrócona. Mała rada: nie mieszaj angielskiego z polskim i jeszcze jakim językiem co by Ci do głowy przyszedł. Korzystaj z jednego (z reguły angielski). Do tego precyzuj nazwy metod, klas, zmiennych tak by było zrozumiałe co konkretnie dana rzecz robi.

alex011251
na nazwy poki co nie patrz.

  1. <?php
  2. class securityBasicAuth {
  3. public $zmienna = '';
  4. public function __construct($url) {
  5. $handle = curl_init($url);
  6. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  7. curl_setopt($handle, CURLOPT_NOBODY, true);
  8. curl_exec($handle);
  9.  
  10. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  11. if ($httpCode == 200) {
  12. $this -> zmienna = TRUE;
  13. } else {
  14. $this -> zmienna = FALSE;
  15. }
  16. curl_close();
  17. }
  18.  
  19. public function open() {
  20. return $this -> zmienna;
  21. }
  22.  
  23. }
  24.  
  25. $link = 'http://c.allegrostatic.pl/images/velalayout/434de666.allegro-logo.png';
  26. $neg ='https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Nie_istnieje.svg/100px-Nie_istnieje.svg.png';
  27. $security = new securityBasicAuth($link);
  28. $wynik = $security -> open();
  29.  
  30. if($wynik){
  31. echo '<img src="'.$link.'" />';
  32. }else{
  33. echo '<img src= "'.$neg.'"/>';
  34.  
  35. }
  36. ?>
Dipter
Nie wiem dlaczego konstruktor robi aż tyle u Ciebie, przekaż w nim zaledwie adres obrazka, następnie stwórz metodę, w której odpalisz całego cURL, następnie przetworzysz informację, a dopiero później sprawdzaj czy obrazek jest faktycznie obrazkiem.

W chwili obecnej zrobiłeś opakowanie przy pomocy klasy na coś, co mogłoby spokojnie być zwykłą funkcją.
alex011251
czyli
construktor
jakas metoda - z curlem
i sprawdzanie w kolejnej metodzie czy jest czy nie ma.


?

OOP myslalem ze bedzie latwiejsze. A dluga droga przedemna

Dipter
No tak to mniej więcej powinno wyglądać. Każda metoda powinna mieć jakieś zajęcie (czyt. coś wykonuje/zwraca/ustawia/modyfikuje etc.), lecz musi to być konkretne zadanie, nie moż robić wszystkiego.
alex011251
  1. <?php
  2. class securityBasicAuth {
  3. public $zmienna = '';
  4. public function __construct($url) {
  5. $handle = curl_init($url);
  6. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  7. curl_setopt($handle, CURLOPT_NOBODY, true);
  8. curl_exec($handle);
  9. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  10. }
  11. public function warunek() {
  12. if ($httpCode == 200) {
  13. $this -> zmienna = TRUE;
  14. } else {
  15. $this -> zmienna = FALSE;
  16. }
  17. }
  18.  
  19. function __descruct() {
  20. return $this -> zmienna;
  21. curl_close();
  22. }
  23. }
  24.  
  25. $link = 'http://c.allegrostatic.pl/images/velalayout/434de666.allegro-logo.png';
  26. $neg ='https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Nie_istnieje.svg/100px-Nie_istnieje.svg.png';
  27. $security = new securityBasicAuth($link);
  28. $wynik = $security -> __descruct();
  29.  
  30. if($wynik){
  31. echo '<img src="'.$link.'" />';
  32. }else{
  33. echo '<img src= "'.$neg.'"/>';
  34.  
  35. }
  36. ?>



Ale nie dziala
CuteOne
Zmienne to nie właściwości klasy (zapomniałeś o $this)
alex011251
Cytat(CuteOne @ 25.05.2013, 23:20:53 ) *
Zmienne to nie właściwości klasy (zapomniałeś o $this)

Dosyc juz tego mam. Nie na moje nerwy

Mogl bys wskazac w ktorym miejscu?
CuteOne
  1. function sprawdz($url) {
  2. $handle = curl_init($url);
  3. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($handle, CURLOPT_NOBODY, true);
  5. curl_exec($handle);
  6.  
  7. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  8. if ($httpCode == 200) {
  9. $zmienna = TRUE;
  10. } else {
  11. $zmienna = FALSE;
  12. }
  13. curl_close();
  14.  
  15. return $zmienna;
  16. }
  17.  
  18.  
  19. $sprawdz = sprawdz('http://blablabla.pl/');
  20.  


Dobra rada... narazie pisz strukturalnie a w międzyczasie poczytaj parę poradników o OOP, zobacz jak to wygląda w popularnych frameworkach (CI, Zend, Kohana) i wróć do pisania gdy uznasz, że poznałeś podstawy
alex011251
Strulturalnie opanowane dlatego chcialem przejsc do OOP . Metoda prob i bledow.
Ale czasem po prostu nie rozumiem . Jezeli cos jest publiczne to powinno wspolgrac. A nie jak ze usune oddzielajace public function

Jak wykonam tak to działa

Ale jak chce oddzielic jak wyzej to juz nie

  1. <?php
  2. class securityBasicAuth {
  3. public $zmienna = '';
  4. public function __construct($url) {
  5. $handle = curl_init($url);
  6. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  7. curl_setopt($handle, CURLOPT_NOBODY, true);
  8. curl_exec($handle);
  9. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  10.  
  11.  
  12. if ($httpCode == 200) {
  13. $this -> zmienna = TRUE;
  14. } else {
  15. $this -> zmienna = FALSE;
  16. }
  17.  
  18. }
  19. function __descruct() {
  20. return $this -> zmienna;
  21. curl_close();
  22. }
  23. }
  24.  
  25. $link = 'http://c.allegrostatic.pl/images/velalayout/434de666.allegro-logo.png';
  26. $neg ='https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Nie_istnieje.svg/100px-Nie_istnieje.svg.png';
  27. $security = new securityBasicAuth($link);
  28. $wynik = $security -> __descruct();
  29.  
  30. if($wynik){
  31. echo '<img src="'.$link.'" />';
  32. }else{
  33. echo '<img src= "'.$neg.'"/>';
  34.  
  35. }
  36. ?>
Dipter
Do każdej metody/właściwości zawartej w tej klasie (lub też tej, po której dziedziczysz, choć nie zawsze) odwołujesz się poprzez $this, to logiczne. Ponadto korzystaj z widoczności w klasach private/protected/public, bo samo "function" nie jest poprawne.

Tak jak napisał CuteOne, przeczytaj kilka poradników o OOP, oraz poznaj zasady takie jak SRP, KISS, DRY i wiele innych, bo w chwili obecnej szukasz problemów na siłę i próbujesz stworzyć coś co nie do końca tak powinno wyglądać.

Przeczytaj też o metodach magicznych, bo nie ma czegoś takiego jak __descruct, w dodatku nie wywołuje się tej metody z zewnątrz.
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.