Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> OOP czy dobrze go stosuję ?
Fanatyko
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 14.08.2010

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


Witam, wiem że w tym dziale jest już świeży temat o stosowaniu OOP, jednak chciałbym aby ktoś zweryfikował mój kod czy to co robię jest zgodne z założeniem OOP.

Jest to przykładowy game framework, dla treningu. Mam w nim 4 klasy User, UserManager, Character, CharacterManager, oto one :

  1. <?php class User {
  2.  
  3. function __construct() {
  4.  
  5. }
  6.  
  7. private $_login = null;
  8. private $_password = null;
  9. private $_email = null;
  10. private $_id = null;
  11. private $_logged = null;
  12.  
  13. // tutaj dalej sa standardowe settery i gettery
  14.  
  15. } ?>


  1. <?php
  2. class UserManager {
  3.  
  4. function __construct($user) {
  5. $this->_user = $user;
  6.  
  7. try{
  8. $this->_pdo = new PDO('mysql:host=localhost;dbname=rsfc;', '', '');
  9. $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. }catch(PDOException $error){
  11. echo 'Problem z baza :( :' . $error->getMessage();
  12. }
  13. }
  14.  
  15. private $_user;
  16.  
  17. public function Logon(){
  18.  
  19. $db = $this->_pdo->prepare('SELECT * FROM user_account WHERE login = :login AND password = :password');
  20. $db->execute(array(':login' => $this->_user->getLogin(), ':password' => $this->_user->getPassword()));
  21.  
  22. try{
  23.  
  24. if($user = $db->fetch()){
  25. echo "Zostales zalogowany";
  26. $this->_user->setId($user[id]);
  27. $this->_user->setLogged(1);
  28. $this->_user->setSession();
  29. }
  30.  
  31. else{
  32. throw new Exception("Nie ma Cie w bazie ! Nie zostales zalogowany :(");
  33. }
  34.  
  35. }catch(Exception $error){
  36. echo $error->getMessage();
  37. }
  38.  
  39. }
  40.  
  41.  
  42. }
  43.  
  44. ?>





  1. <?php
  2. class Character {
  3.  
  4. function __construct() {
  5.  
  6. }
  7.  
  8. private $_strenght;
  9. private $_speed;
  10. private $_dynamic;
  11. private $_condition;
  12. private $_pain;
  13. private $_endurance;
  14. private $_iq;
  15. private $_coordination;
  16. private $_technic;
  17. private $_flex;
  18. private $_life;
  19. private $_level;
  20. private $_experince;
  21. private $_needexperince;
  22. private $_money;
  23. private $_reputation;
  24. private $_movepoints;
  25.  
  26. private $_id = null;
  27.  
  28. //settery
  29.  
  30. // tutaj tez standardowe settey i gettery
  31.  
  32.  
  33. }
  34.  
  35. ?>


  1. <?php
  2. class CharacterManager {
  3.  
  4. function __construct($character) {
  5. $this->_character = $character;
  6.  
  7. try{
  8. $this->_pdo = new PDO('mysql:host=localhost;dbname=rsfc;', '', '');
  9. $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. }catch(PDOException $error){
  11. echo 'Problem z baza :( :' . $error->getMessage();
  12. }
  13.  
  14.  
  15. }
  16.  
  17.  
  18.  
  19. private $_character;
  20. private $_pdo;
  21.  
  22. public function render(){
  23. include './views/character.php';
  24. }
  25.  
  26. public function upgradeStatistic($statistic, $how_much){
  27.  
  28.  
  29. $db = $this->_pdo->prepare('UPDATE user_character SET '.$statistic.' = '.$statistic.' + :how_much WHERE id = :id');
  30. $db->execute(array(':how_much' => $how_much, ':id' => $this->_character->getIdFromSession()));
  31.  
  32. }
  33.  
  34. public function downgradeStatistic($statistic, $how_much){
  35.  
  36.  
  37. $db = $this->_pdo->prepare('UPDATE user_character SET '.$statistic.' = '.$statistic.' - :how_much WHERE id = :id');
  38. $db->execute(array(':how_much' => $how_much, ':id' => $this->_character->getIdFromSession()));
  39.  
  40. }
  41.  
  42. public function setStatistics(){
  43. try{
  44.  
  45. $db = $this->_pdo->prepare('SELECT * FROM user_character WHERE id = :id');
  46. $db->execute(array(':id' => $this->_character->getIdFromSession()));
  47.  
  48. if($character = $db->fetch()){
  49. $this->_character->setCondition($character['condition']);
  50. $this->_character->setCoordination($character['coordination']);
  51. $this->_character->setDynamic($character['dynamic']);
  52. $this->_character->setEndurance($character['endurance']);
  53. $this->_character->setExperince($character['experince']);
  54. $this->_character->setFlex($character['flex']);
  55. $this->_character->setIq($character['iq']);
  56. $this->_character->setLevel($character['level']);
  57. $this->_character->setLife($character['life']);
  58. $this->_character->setMoney($character['money']);
  59. $this->_character->setMovePoints($character['move_points']);
  60. $this->_character->setNeedExperince($character['needexperince']);
  61. $this->_character->setPain($character['pain']);
  62. $this->_character->setReputation($character['reputation']);
  63. $this->_character->setSpeed($character['speed']);
  64. $this->_character->setStrenght($character['strenght']);
  65. $this->_character->setTechnic($character['technic']);
  66.  
  67. }else{
  68. throw new Exception('Nie moge uaktualnic statystyk :(');
  69. }
  70. }
  71. catch(Exception $error){
  72. echo 'Wystapil blad:' . $error->getMessage();
  73. }
  74. }
  75.  
  76. }
  77. ?>


Index.php

  1. <?php
  2.  
  3. require 'class/Character.php';
  4. require 'class/CharacterManager.php';
  5. require 'class/User.php';
  6. require 'class/UserManager.php';
  7.  
  8. $User = new User;
  9. $User->setLogin('');
  10. $User->setPassword(md5(''));
  11.  
  12. $UserManager = new UserManager($User);
  13. $UserManager->Logon();
  14.  
  15. try{
  16. if($User->getLogged() == 1){
  17.  
  18. $Character = new Character;
  19. $Character->setIdFromSession();
  20. $CharacterManager = new CharacterManager($Character);
  21. $CharacterManager->upgradeStatistic('strenght', 5);
  22. $CharacterManager->setStatistics();
  23. echo $Character->getStrenght();
  24. }else{
  25. throw new Exception('Nie jestes zalogowany !');
  26. }
  27.  
  28.  
  29. }catch(Exception $error){
  30. echo 'Wystapil blad:'.$error->getMessage();
  31.  
  32. }
  33.  
  34.  
  35.  
  36. ?>



Pytania:

1. Głowne - czy ten kod jest zgodny z OOP ?
2. Czy metoda Logon() powinna być w klasie UserManager czy w osobnej np. Login
3. Czy tworzenie obiektu User a potem przekazywanie go do UserManager w celu obróbki itp jest prawidłowe ? Czy w klasie UserManager powinna być metoda tworząca obiekt User ? (to tyczy się również klas Character i CharacterManager)

Proszę o wytknięcie mi błedów i sposobów w jaki mogę je poprawić (IMG:style_emoticons/default/wink.gif)

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Mi nie podoba się jedna rzecz... zrobiłeś z klasy User kontener dla danych. Po co klasie User wiedzieć jaki login a tym bardziej hasło jest przekazywane przez formularz? Od tego masz klasę UserAuthorisation, która to może (ale nie musi) wypełnić danymi klasę User wysyłając do niej unikalne id użytkownika. Dobry przykład autoryzacji znajdziesz w książce PHP5 Zaawansowane programowanie
Go to the top of the page
+Quote Post

Posty w temacie
- Fanatyko   OOP czy dobrze go stosuję ?   27.08.2011, 20:16:00
- - smentek   Cytat1. Głowne - czy ten kod jest zgodny z OOP ? ...   27.08.2011, 21:23:05
- - Fanatyko   No właśnie też złapałem się na tym, że rzucam nazw...   28.08.2011, 06:10:21
- - rahul   mysle ze mozesz sobie poczytac moj post, zadawalem...   28.08.2011, 09:32:09
- - elektrrrus   Prawdopodobnie całkiem przez przypadek, ale zrobił...   28.08.2011, 09:46:31
- - Spawnm   Za łączenie z pdo powinna odpowiadać klasa db a ni...   28.08.2011, 09:51:15
- - smentek   CytatPrawdę mówiąc nie wiem czy złapałem o co chod...   28.08.2011, 10:01:51
- - Fanatyko   Cytatmysle ze mozesz sobie poczytac moj post, zada...   28.08.2011, 11:47:00
- - melkorm   jeżeli masz dane w tablicy o takich samych nazwach...   28.08.2011, 12:04:58
- - smentek   CytatZakładając, że chcę napisać klasę do logowani...   28.08.2011, 12:42:34
- - Fanatyko   CytatIm mniejsze czyli bardziej rozdrobnione obiek...   29.08.2011, 19:31:13
- - Fantazyn   Dla mnie kod wygląda całkiem znośnie, ale: 1. Unik...   29.08.2011, 20:12:22
- - banditpanda   class Database { function __construct() ...   29.08.2011, 20:16:28
- - Fanatyko   @Fantazyn dzięki za odpowiedź, naprawdę mi się pr...   29.08.2011, 21:52:58
- - smentek   Cytat"W którymś tematcie o OOP było napisane,...   30.08.2011, 20:30:25
- - Fanatyko   CytatI to jest złe stosowanie get i set. Jezeli wp...   30.08.2011, 21:11:51
- - daren88   Główny problem tej klasy na co już niektórzy zwróc...   3.09.2011, 21:20:21
- - CuteOne   Mi nie podoba się jedna rzecz... zrobiłeś z klasy ...   4.09.2011, 12:22:55


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: 25.12.2025 - 18:39