Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Początki programowania obiektowego
Rookie
post
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Nie za bardzo rozumiem tego programowania obiektowego, więc dla treningu, chciałem napisać prosty skrypt do hashowania słów.
Kiedyś taki był mi potrzebny więc napisałem go, teraz chciałem uzyskać taki sam efekt stosując klasy ;p.
A więc pierwotny:
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  2. <html>
  3. <head>
  4. <title>MD5 i SHA1</title>
  5. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  6. </head>
  7. <style type="text/css">body {font-size: 12; font-family: Arial;}</style>
  8. <body>
  9. <?php
  10. if(!empty($_POST['hash'])) {
  11. $md5 = $_POST['hash'];
  12. echo "Wpisane słowo: <b>$md5</b><br>";
  13. $md5 = md5($md5);
  14. echo "Zahashowane md5: <b>$md5</b><br>";
  15. $sha1 = $_POST['hash'];
  16. $sha1 = sha1($sha1);
  17. echo "Zahashowane sha1: <b>$sha1</b><br>";
  18. }
  19. ?>
  20. <form action="md5.php" method="POST">
  21. <label>Wprowadź słowo do zahashowania: </label><input type="text" name="hash" value=""><input type="submit" value="Koduj">
  22. </form>
  23. </body>
  24. </html>

I nowy:
  1. <?php
  2. class hash {
  3. var $hash;
  4. var $blad='';
  5. public function hash_md5($hash_md5) {
  6. $hash_md5 = $this->hash;
  7. $hash_md5 = md5($hash_md5);
  8. return $hash_md5;
  9. }
  10. public function hash_sha1($hash_sha1) {
  11. $hash_sha1 = $this->hash;
  12. $hash_sha1 = sha1($hash_sha1);
  13. return $hash_sha1;
  14. }
  15. }
  16. class sprawdz extends hash {
  17. function __construct($hash) {
  18. if(!isset($this->hash) OR empty($this->hash)) {
  19. $blad = '<span style="color: red;">Wypełnij pole</span>';
  20. return $blad;
  21. }
  22. }
  23. }
  24. $hashuj = new hash();
  25. $sprawdzaj = new sprawdz($_POST[hash]);
  26. if($sprawdzaj->blad!='') {
  27. echo $blad.$form;
  28. } else {
  29. $hashuj->hash_md5($_POST[hash]);
  30. $hashuj->hash_sha1($_POST[hash]);
  31. echo 'Wpisane słowo: ';
  32. echo $_POST[hash];
  33. echo '<br>MD5: ';
  34. echo $hashuj->hash_md5;
  35. echo '<br>SHA1: ';
  36. echo $hashuj->hash_sha1;
  37. echo '<br>';
  38. }
  39. ?>
  40. <form action="klasa_hashujaca.php" method="POST">
  41. <label>Wprowadź słowo do zahashowania: </label><input type="text" name="hash" value=""><input type="submit" value="Hashuj">
  42. </form>

Oczywiście pierwotny działa, a nowy... no właśnie.
Jak to bywa na początkach zawsze nie wychodzi.
Mimo, że nic nie wpisałem Pokazuje się:
Wpisane słowo:
MD5:
SHA1:
[formularz]
a gdy wpiszę słowo, pokazuje się wpisane słowo: [słowo]
i dalej przy MD5 i SHA 1 jest pusto.
PHP nie zgłasza żadnych błędów więc piszę tutaj, bo jak mówię ni znam się na programowaniu obiektowym i tym skryptem chcę załapać o co w tym dokładnie chodzi
Z góry dzięki za pomoc w nauce ;p
Pozdrawiam.
Go to the top of the page
+Quote Post
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




  1. echo $hashuj->hash_md5;

Skoro jest to wywołanie metody klasy (podpowiedź: FUNKCJI), to czegoś tu chyba brakuje.
W pozostałych wywołaniach analogicznie.

Druga uwaga: naucz się OOP zgodnego ze składnią PHP 5 (modyfikatory dostępu dla zmiennych, nie używaj var i takie tam)

//EDIT
Tu masz ok:
  1. $hashuj->hash_md5($_POST[hash]);

ale nie przypisujesz zwracanej wartości żadnej zmiennej, więc jak chcesz ją wyświetlić? W metodzie hash_md5() też nie ma 'echo', więc raczej Ci się to nie pokaże samo.

To jest w ogóle bez sensu:
  1. $hash_md5 = $this->hash;
  2. $hash_md5 = md5($hash_md5);
  3. return $hash_md5;

Powinno być chyba raczej w ten sposób:
  1. $this->hash = $hash_md5 //przypisujesz skladowej klasy argument przekazany metodzie
  2. return md5($this->hash); //zwracasz zahaszowaną wartosć


No i ta klasa sprawdz, to już jest przerost formy nad treścią, bo nie do tego służy dziedziczenie. Wystarczy, że zrobisz to sprawdzanie w klasie hash.

Ten post edytował blooregard 29.08.2009, 19:05:01


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Rookie
post
Post #3





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Jeżeli chodzi ci o:
  1. $hashuj = new hash();

To jakbyś nie zauważył w kodzie ta linijka się znajduje ^^
A jeżeli nie o to ci chodzi tylko brakuje mi czegoś innego to nie wiem czego ;p
EDIT: No chyba, że chodzi ci o:
  1. $hashuj->hash_md5($_POST[hash]);
  2. $hashuj->hash_sha1($_POST[hash]);

To również się tam znajduje

Ten post edytował Rookie 29.08.2009, 19:02:19
Go to the top of the page
+Quote Post
skowron-line
post
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Po 1 primo to żyjemy w erze php5 a ty piszesz w php4.
Po 2 primo to taka klasa jest raczej zbędna skoro masz funkcję do tego no ale jak chcesz pisać to twój wybór.
Jak już musisz to zrób to tak
- sprawdz czy dany algorytm istnieje ( http://pl.php.net/manual/en/function.hash-algos.php, http://pl.php.net/manual/en/function.in-array.php )
- a pozniej hashuj ( http://pl.php.net/manual/en/function.hash.php )
Ale czy z tego wyjdzie aż klasa to niewiem.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Rookie
post
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


skowron, korzystam z "PHP i MySQL Vademecum profesjonalisty" i wg tej książki to jest php5 ;p
Jak ty byś to napisałquestionmark.gif
Go to the top of the page
+Quote Post
blooregard
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Nie, nie chodzi mi o utworzenie instancji klasy.

Chodzi mi o wywoływanie metod klasy (FUNKCJI) bez nawiasów oraz przekazania do nich parametrów.
Różnica pomiędzy:
  1. echo $hashuj->hash_md5;

a:
  1. echo $hashuj->hash_md5($_POST['hash']);

jest znaczna. To raz.

Dwa:
Jak chcesz, żeby Ci wyświetliło hasz, skoro nigdzie nie ma ECHO przed metodami, które tego hasza zwracają ? Albo nie przypisujesz zwracanej wartości do zmiennej, by ją potem wyświetlić?

Ten post edytował blooregard 29.08.2009, 19:21:34


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
skowron-line
post
Post #7





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Rookie @ 29.08.2009, 19:12:22 ) *
skowron, korzystam z "PHP i MySQL Vademecum profesjonalisty" i wg tej książki to jest php5 ;p

Które wydanie questionmark.gif
Cytat(Rookie @ 29.08.2009, 19:12:22 ) *
Jak ty byś to napisałquestionmark.gif

Napisałem wyżej.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Rookie
post
Post #8





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


zrobiłem specjalnie return by móc wyświetlić zmienną zawierającą hash gdzie chcę
@Skowron
trzecie ;p
blooregard owszem pokazał hash ale nie wiem dlaczego wtedy kiedy nic nie wpisałem, tak jakby nie sprawdził, czy jest wypełnione pole, a po 2 potem nie ważne co wpisałem, to hash został ten sam ;p

Ten post edytował Rookie 29.08.2009, 19:31:07
Go to the top of the page
+Quote Post
blooregard
post
Post #9


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
zrobiłem specjalnie return by móc wyświetlić zmienną zawierającą hash gdzie chcę

RETURN nic nie wyświetla, słuzy do zwracania wartości przez funkcję lub metodę.
Możesz sobie zrobić tysiąc metod z RETURN, a i tak w oknie przeglądarki zobaczysz jedynie biel.

Do wyświetlania służy ECHO bądź PRINT.



--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
skowron-line
post
Post #10





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(blooregard @ 29.08.2009, 19:28:46 ) *
a i tak w oknie przeglądarki zobaczysz jedynie biel.


A jak będzie ustawiony na stronie background ;] ( @blooregard szatański post 666 )

Rookie w części 3 jest opisane coś takiego jak public, private, protected może nie doszedłeś jeszcze tak daleko.
A i może przeczytaj rozdział o funkcjach skoro nie wiesz co i jak z return.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Rookie
post
Post #11





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Wiem, ale jak dam np. return $zmienna; to potem mogę wyświetlić tą zmienną gdziekolwiek chcę nie tylko tam gdzie wywołuję funkcję, mogę dopiero potem dać echo $zmienna; i strona nie będzie biała ;p
EDIT: czytałem, wszędzie mam zresztą "public function", tylko jak pisałem w 1-wszym poscie to są dopiero początki i nie rozumiem tego programowania obiektowego, w książce są tylko najprostrze przykłady i jakoś nie mogę pojąć, właśnie próbuję przełożyć je na mój skrypt ale nie wyszło mi najlepiej ;p

Ten post edytował Rookie 29.08.2009, 19:36:06
Go to the top of the page
+Quote Post
blooregard
post
Post #12


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Cytat
Wiem, ale jak dam np. return $zmienna; to potem mogę wyświetlić tą zmienną gdziekolwiek chcę nie tylko tam gdzie wywołuję funkcję, mogę dopiero potem dać echo $zmienna; i strona nie będzie biała ;p

Ta, akurat.

Masz przykładową funkcję:
function a($a) {
return $a*$a;
}

Wyświetli Ci? Nie.

Przekazujesz do metody argument:
...
funkcja(3);
echo $a;

Wyświetli Ci 9? Nie.
A czemu?
Bo $a to zmienna widoczna jedynie w funkcji.

Żeby wyświetlić, musisz zrobić to tak:
$b = funkcja(3);
echo $b;

albo:

echo funkcja(3);

Popatrz teraz na swój kod:

  1. $hashuj->hash_md5($_POST[hash]);
  2. $hashuj->hash_sha1($_POST[hash]);
  3. echo 'Wpisane słowo: ';
  4. echo $_POST[hash];
  5. echo '<br>MD5: ';
  6. echo $hashuj->hash_md5;
  7. echo '<br>SHA1: ';
  8. echo $hashuj->hash_sha1;
  9. echo '<br>';

Pytanie za 100 pkt. CZEGO TU BRAKUJE, żeby wyświetlić te hasze?
Podpowiedź: jak głośno krzyczysz w lesie, to słychać....questionmark.gifquestionmark.gif

//edit
@skowron: ale już anielski 667-my smile.gif


Ten post edytował blooregard 29.08.2009, 19:40:37


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
Rookie
post
Post #13





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Dobra wiem ;p
  1. echo 'Wpisane słowo: ';
  2. echo $_POST[hash];
  3. echo '<br>MD5: ';
  4. echo $hashuj->hash_md5($_POST['hash']);
  5. echo '<br>SHA1: ';
  6. echo $hashuj->hash_sha1($_POST['hash']);
  7. echo '<br>';

załapałem
Ale jak już pisałem pokazuje mi hashe pustego pola po wpisaniu jakiegokolwiek słowa, zostają dalej poprzednie hashe, nie zmieniają się ;p
ADD: No dobra a jak np. wyciągnąć zmienną błąd z takiej klasy:
  1. class sprawdz extends hash {
  2. function __construct($hash) {
  3. if(!isset($this->hash) OR empty($this->hash)) {
  4. $blad = '<span style="color: red;">Wypełnij pole</span>';
  5. return $blad;
  6. }
  7. }
  8. }

ADD: Szybko się uczę, konkretnej pomocy tu nie znalazłem, ale sam doszedłem do rozwiązania problemu, wszystko działa ok, teraz dla utrwalenia rozwinę trochę funkcje skryptu. Dołączam moje wypociny ;p:
  1. <?php
  2. class hash {
  3. var $hash;
  4. public function hash_md5($hash_md5) {
  5. $hash_md5 = $this->hash;
  6. $hash_md5 = md5($hash_md5);
  7. return $hash_md5;
  8. }
  9. public function hash_sha1($hash_sha1) {
  10. $hash_sha1 = $this->hash;
  11. $hash_sha1 = sha1($hash_sha1);
  12. return $hash_sha1;
  13. }
  14. }
  15. class sprawdz extends hash {
  16. public $blad='';
  17. function czy_jest_wpis($pusto) {
  18. $pusto = $this->hash;
  19. if(strlen($pusto) < 1) {
  20. $this->blad = '<span style="color: red;">Wypełnij pole</span><br>';
  21. echo $this->blad;
  22. }
  23. }
  24. }
  25. $hashuj = new hash();
  26. $hashuj->hash = $_POST[hash];
  27. $sprawdzaj = new sprawdz();
  28. $sprawdzaj->hash = $_POST[hash];
  29. $sprawdzaj->czy_jest_wpis($_POST[hash]);
  30. if($sprawdzaj->blad=='') {
  31. echo 'Wpisane słowo: <b>';
  32. echo $_POST[hash];
  33. echo '</b><br>MD5: <b>';
  34. echo $hashuj->hash_md5($_POST['hash']);
  35. echo '</b><br>SHA1: <b>';
  36. echo $hashuj->hash_sha1($_POST['hash']);
  37. echo '</b><br>';
  38. }
  39. $hashuj->hash_md5($_POST[hash]);
  40. ?>
  41. <form action="klasa_hashujaca.php" method="POST">
  42. <label>Wprowadź słowo do zahashowania: </label><input type="text" name="hash" value=""><input type="submit" value="Hashuj">
  43. </form>


Ten post edytował Rookie 29.08.2009, 21:20:15
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 03:10