Poprawność pisania klas i ich zależności. Gra przeglądarkowa PHP OOP

0

Zaczynam uczyć się programowanie obiektowego i swoją naukę rozpocząłem od pisania gry przeglądarkowej, przedstawiam okrojony sposób pisania klas jaki stosuję i zwracam się z pytaniem do profesjonalistów czy idę w dobrym kierunku czy raczej powinienem pozostać przy programowaniu proceduralnym.

<?php

  $gracz_id = 1;

  $Gracz = new gracz($gracz_id,'tabela_gracz');
    
    $id_przedmiotu = 1;
    
    $Przedmioty = new przedmioty('tabela_przedmioty');
    $Przedmioty -> set_id_przedmiotu($id_przedmiotu);
    
    $cena_przedmiotu = $Przedmioty->get_cena_rzedmiotu($id_przedmiotu);

    $ile_zostanie_kasy = $Gracz->kasa - $cena_przedmiotu;
    
    if ($ile_zostanie_kasy>=0) {
            $Gracz->kasa = $ile_zostanie_kasy;
            $Gracz-> kup_przedmiot($id_przedmiotu);
            $Przedmioty->set_przedmiot_kupiony();
    }
    
    echo $Gracz -> kasa;
    
    

    
    
class gracz {
    private $table;

  function __construct($id, $table)   {  
      $this -> id_gracz= $id;
            $this -> table = $table;
  }

  public function pobierz_dane(){
    global $db;

        $stats = $db -> Execute("SELECT `kasa`  FROM  ".$this -> table."     WHERE `id_gracz`='".$this -> id_gracz."'    ");
        $this -> kasa= $stats -> fields['kasa'];
  }

  public function aktualizuj_kase(){
        global $db;

        $result = $db -> Execute("UPDATE ".$this -> table."  SET `kasa`=  '".$this -> kasa."' WHERE `id_gracz`='".$this -> id_gracz."' ");                    
  }
    
    public function kup_przedmiot($id){
        global $db;

        $result = $db -> Execute("UPDATE ".$this -> table."  SET `id_przedmiotu`=  '".$id."' , `kasa`=  '".$this -> kasa."' WHERE `id_gracz`='".$this -> id_gracz."' ");                    
  }

}


class przedmioty {
    private $table;
    public $id_przedmiotu;

  function __construct($table)   {  
            $this -> table = $table;
  }
    
    public function set_id_przedmiotu($id){
            $this -> id_przedmiotu = $id;
    }

  public function get_cena_rzedmiotu(){
    global $db;

        $stats = $db -> Execute("SELECT `cena`  FROM  ".$this -> table."     WHERE `id_przedmiot`='".$this -> id_przedmiotu."'    AND `przedmiot_do_kupienia`='1'  ");
        return $stats -> fields['cena'];
  }


    public function set_przedmiot_kupiony(){
        global $db;
        
        $result = $db -> Execute("UPDATE ".$this -> table."  SET `przedmiot_do_kupienia`=  '0'  WHERE `id_przedmiot`='".$this -> id_przedmiotu."' ");                    
  }
    
}


?>
0
  1. globale to zło, choć wiem, że w przypadku połączenia z bazą jest to po prostu przydatne. wszyscy będą Ci rzucać, żebyś zapoznał się z singletonem, ja z kolei powiem, że wolę połączeznie z bazą jako zwykły obiekt, a obiekt ten przechowywać sobie w statycznej zmiennej jakiejś klasy - dlatego, że bardzo rzadko, ale czasem się zdarza mieć połączenie do dwóch różnych baz - singleton wtedy jest zbędny

  2. myślę, że klasa sama w sobie powinna wiedzieć do jakiej tabeli chce się łączyć - podawanie tego w konstruktorze wydaje mi się niepraktyczne.

  3. kod, wszystkie zmienne itd warto nazywać po angielsku, nawet jeżeli nikomu tego kodu przedstawiać nie będziesz (a wiadomo, że ludziom zza granicy byłoby ciężko rozumieć kod w połowie po polsku) - jeżeli z programowaniem wiążesz jakąś przyszłość, to kod i tak potem będziesz pisał po angielsku, dokumentacje będziesz miał po angielsku, czyjeś kody, z których będziesz korzystał też będą po angielsku. no i tak jest bardziej "profesjonalnie" po prostu :p

1 użytkowników online, w tym zalogowanych: 0, gości: 1