Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OOP] Moduł strony www
!mistrz
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 30.10.2008

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


Witam wszystkich ludzi dobrej woli (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Od jakiegoś czasu interesuję się programowaniem obiektowym w PHP, ale bez odpowiedzi na moje pytania oraz wątpliwości chyba nigdy tego nie zrozumiem. Dlatego właśnie postanowiłem napisać i zdać się na doświadczenie osób, które się tym zajmują na co dzień.

Pytania oprę na ostatnio realizowanym projekcie jakim był serwis www z grami flash. Jak to serwis można w nim wyróżnić pewne części/moduły takie jak: Najpopularniejsza gra, Ostatnio grana gra, Newsletter... No i tu pojawia się moje pierwsze pytanie. Czy taki każdy moduł powinien być osobną klasą, której obiekt będziemy tworzyć??

Drugie moje pytanie będzie dotyczyło konkretnego modułu, który odpowiedzialny jest za wyświetlanie wszystkich gier z bazy danych z określonej kategorii. Jak byście takie coś zorganizowali w sposób obiektowy?? Mógłby ktoś tak w skrócie przedstawić jakie własności powinna mieć klasa, jakie metody, oczywiście bez implementacji. Tak tylko, żebym mógł się zapoznać.

Ja zrobiłem coś takiego tyle, że mi się to niespecjalnie podoba:

Kod
class CatGames
           {
               private $data = array();
      
               function __construct($cat_name)
               {
                   global $db;
                  
                   $result = $db->query('SELECT name_id, name FROM games g
                                                 LEFT JOIN categories c ON g.cat_id=c.id
                                                 WHERE c.name=\''.$cat_name.'\'');
      
                   while($row = $result->fetch_assoc())
                   {
                       $row['url'] = getURL('gra',$row['name_id']);
                       $this->data[] = $row;
                   }
                  
                   $result->close();
               }
              
               function __get($var)
               {
                   return $this->$var;
               }
           }
          
           $catgames = new CatGames();
           $smarty->assign('catgames',$games->data);


Z góry dzięki z pomoc i pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
markac
post
Post #2





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 23.02.2005

Ostrzeżenie: (10%)
X----


Trudno tu coś doradzić. Za mało informacji. Tworzenie klas do każdej możliwej operacji uważam także za zły pomysł i radzę poczytać o OOP.
"Najpopularniejsza gra, Ostatnio grana gra" - można to upchać w jedną klasę i dwie metody, to chyba jasne?
Obiekt reprezentuje jakiś fizyczny byt, w tym przypadku grę. Trzecia metoda jaka bym dodał jest wyświetlenie gier z kategorii.
Przez moduł rozumiem zbiór operacji, który także dla mnie powinien być klasą (Newsletter).

A przykładowa klasa... hm, nie wiem czy to Ci teraz w czymś pomoże:
  1. <?php
  2. class Game {
  3.  public function getTopRankGame() { /*...*/ }
  4.  public function getLastPlayedGame() { /*...*/ }
  5.  public function getGamesFromCategory($categoryId) { /*...*/ }
  6. }
  7. ?>


Możesz wykorzystać adres URL w postaci np. www.adres.pl/index.php?modul=Game&akcja=getGamesFromCategory&id=30, gdzie moduł odpowiada nazwie klasy, akcja nazwie metody tej klasy. Id to parametr. Może być ich więcej, to zależy już od Ciebie.

Najprostsza postać wywołania metody obiektu może wyglądać tak:
  1. <?php
  2. $className = $_GET['modul'];
  3. $methodName = $_GET['akcja'];
  4. $params = isset($_GET['id']) ? array($_GET['id']): array(); // id kategorii
  5.  
  6. require_once($className . '.php');
  7. $game = new $className;
  8. $game->call_user_method_array($methodName, $className, $params);
  9. ?>


Ten post edytował markac 9.11.2008, 01:12:05
Go to the top of the page
+Quote Post

Posty w temacie


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: 5.10.2025 - 09:32