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

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: 23.12.2025 - 00:03