Programowanie obiektowe w PHP - Strona 4
Forum MMO - Tworzenie gier via www i MMO
Strona 4 z 4 PierwszyPierwszy ... 234
Pokaż wyniki od 31 do 37 z 37

Wątek: Programowanie obiektowe w PHP

  1. Zarejestrowany
    Dołączył: Jul 2008
    Posty: 799
    Pobieralnia
    1
    Dodane pliki
    0
    Thumbs Up/W dół
    Otrzymane: 19/0
    Dane: 81/16
    Siła reputacji: 91

    Programowanie obiektowe w PHP

    #1
    Witam, ogólnie wiem sporo na temat programowania obiektowego, jednak w praktyce ciężko mi jest tego używać z jednego powodu. Chodzi o powiązania i widoczność między klasami, które nie są dziedziczone. Obecnie pracuję nad pewnym, trzecim z kolei, skrytem walki. Problem zawsze jest ten sam i nie dotyczy tylko walki ale całego projektu.

    Bardzo często muszę przekazywać dane, które są zapamiętane dużo dalej.
    Np.
    Kod php:
    class Battle {
        private 
    $arrayParty;
    }
    class 
    Party {
        private 
    $arrayUnit;
    }
    class 
    Unit {
        private 
    $arraySkill;
    }
    class 
    Skill {
        
    //koniec łancucha pokarmowego

    Rzecz jasna nie są to klasy dziedziczone, bo nie mają ze sobą wiele wspólnego.

    Jednak.. Przykładowo zajmijmy się klasą bazy danych. Załóżmy, że mój plik index.php wygląda od pewnego momentu tak:

    Kod php:
    $Database = new Database([
        
    'DB_HOST' => '-',
        
    'DB_USER' => '-',
        
    'DB_PASS' => '-',
        
    'DB_NAME' => '-'
    ]);

    //...

    $mainPlayer = new Player($intId); 
    Kod php:
    class Player {
        private 
    $objectEquipment;
        private 
    $objectInventory;

       function 
    __construct($intId) {
            
    //tutaj muszę mieć obiekt "$Database".
       
    }

    W porządku, mogę zrobić coś takiego:
    Kod php:
    function __construct($intId, &$rDatabase) {

    I zapisać sobie np. ten obiekt w polu klasy Player. Ewentualnie wyciągnąć z bazy danych co chcę i po problemie.

    Jednak tą zmienną potrzebuję praktycznie wszędzie, w Equipment, Inventory, Skills, każdym obiekcie (większość nie jest dziedziczona, co nie powinno dziwić).
    Pytanie jak ją zdobyć? Jak to się robi w profesjonalnych projektach? Jak to się robi w innych językach programowania? Bo ja w każdym mam praktycznie ten problem.


    Jeżeli chodzi o PHP, to mam takie rozwiązania i żadne nie wydają mi się idealne:

    A. Niech Database będzie singletonem. No super, niby w większości przypadków to przejdzie. Tylko mam trzy zastrzeżenia:
    1. Dla Database to ma sens, ale jest wiele różnych klas, dla których to nie jest dobre. Czasami po prostu potrzebujemy wiele instancji danego obiektu.
    Niby można stworzyć "tablicę singletonów", ale to już jest jeszcze bardziej chore. Click here to enlarge
    2. Singleton ogólnie przeczy programowaniu obiektowemu, right?

    B. Rejestr-singleton, w którym tworzę dowolną ilość obiektów danego typu.
    Już jest lepiej, ale nadal używamy singletona. Podobno singletonów się nie używa, ale nie widzę nigdzie informacji jak zrobić inaczej.

    C.
    Kod php:
    global $Database
    Podziękuję.. ? Na pewno tak się nie robi.

    D. Wracając do struktury klas obsługujących walkę, mógłbym zrobić coś w stylu listy wiązanej:
    Kod php:
    class Battle {
        private 
    $arrayParty;
    }
    class 
    Party {
        private 
    $rBattle;
        private 
    $arrayUnit;
    }
    class 
    Unit {
        private 
    $rParty;
        private 
    $arraySkill;
    }
    class 
    Skill {
        private 
    $rUnit;
        
    //koniec łancucha pokarmowego

    To chyba rozwiązuje wszelkie problemy, mogę sobie łazić pomiędzy tymi klasami do woli, tylko czy to nie jest przekombinowane?
    No i absolutnie nie rozwiązuje problemu z klasą/zmienną Database..

    E. Jeszcze mi przyszedł taki pomysł, żeby wszystko wrzucić w coś w stylu "maina", a dalej robić listę wiązaną pomiędzy wszystkimi obiektami.. No ale to nie jest zbyt mądre, szczególnie gdy będę chciał zmienić strukturę czegoś to będzie dość niestabilne.
    final class Main {
    private $Database;

    function __construct() {
    $this->Database = new Database();

    //wiele ciekawych rzeczy, każdej tworzonej klasie przekazuję przekazuję &$this;
    }
    }


    Wiem, że to długi i chaotyczny post, ale jestem trochę poirytowany, że nie umiem czegoś tak trywialnego zrobić i nie wiem jak to dobrze opisać.

    0 Nie wolno! Nie wolno!
    Nie można żyć samym życiem.

  2. Zarejestrowany
    Dołączył: Jun 2010
    Posty: 230
    Pobieralnia
    10
    Dodane pliki
    1
    Thumbs Up/W dół
    Otrzymane: 17/7
    Dane: 31/27
    Siła reputacji: 33

    Odp: Programowanie obiektowe w PHP

    #31
    Symfony nie mieszaj do tego. Nie no, zartuje. Uwazam ze, jesli ma istniec 'event' to powinien miec on 'event loop', a jakos nie widzi mi sie EDP w PHP, a nawet jesli by juz probowac EDP to nie w PHP, bo ten jezyk ma jedna, ale to nadal uciazliwa wade - predkosc.

    0 Nie wolno! Nie wolno!
    Linus Torvalds: Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...

    Do czego służy Internet Explorer?
    Do ściągnięcia innej przeglądarki.

  3. Grupa GaMMO
    Dołączył: Apr 2008
    Posty: 3,114
    Pobieralnia
    0
    Dodane pliki
    0
    Thumbs Up/W dół
    Otrzymane: 59/17
    Dane: 1/9
    Siła reputacji: 323

    Odp: Programowanie obiektowe w PHP

    #32
    To o czym jenkins pisze to nic innego jak przerost formy nad trescia. Sa ludzie ktorzy zamiast wybrac inny jezyk zaczeli dodawac do php eventy chocby we frameworkach. Nic do nich nie mam, ale to co robia uwazam za glupie i tyle.

    0 Nie wolno! Nie wolno!
    Ujemna reputacja RLZZZZZZ!

    Piszem poprawnie po polskiemu!!!1!!11

  4. Zarejestrowany
    Dołączył: Dec 2013
    Posty: 91
    Pobieralnia
    0
    Dodane pliki
    0
    Thumbs Up/W dół
    Otrzymane: 14/9
    Dane: 14/12
    Siła reputacji: 0

    Odp: Programowanie obiektowe w PHP

    #33
    Jeśli chodzi o prędkość to faktycznie jest do dupy z tymi eventami, chociaż istnieje dużo narzędzi do przyspieszania pracy php to i tak lipa. Prosty system w połączeniu z ajaxem spisuje się ok, ale prosty - nie ten z frameworków.

    0 Nie wolno! Nie wolno!

  5. Zarejestrowany
    Dołączył: Jun 2010
    Posty: 230
    Pobieralnia
    10
    Dodane pliki
    1
    Thumbs Up/W dół
    Otrzymane: 17/7
    Dane: 31/27
    Siła reputacji: 33

    Odp: Programowanie obiektowe w PHP

    #34
    Szczerze nigdy nie interesowalem sie EDP w PHP, bo jak o tym uslyszalem to myslalem, ze ktos jaja sobie robi, bo to brzmi jak paradoks. PHP jest jezykiem skryptowym, gdzie interpreter czyta linikami, problem w tym ze PHP nie da sie zapetlic jak np. JavaScript, wiec eventy sa tu takim bajerem, ani to przydatne, ani praktyczne, takie 'cos', aby wypelnic jakas luke i odwrocic uwage od waznych wad PHP.

    0 Nie wolno! Nie wolno!
    Linus Torvalds: Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...

    Do czego służy Internet Explorer?
    Do ściągnięcia innej przeglądarki.

  6. Grupa GaMMO
    Dołączył: Apr 2008
    Posty: 3,114
    Pobieralnia
    0
    Dodane pliki
    0
    Thumbs Up/W dół
    Otrzymane: 59/17
    Dane: 1/9
    Siła reputacji: 323

    Odp: Programowanie obiektowe w PHP

    #35
    problem w tym ze PHP nie da sie zapetlic jak np. JavaScript
    Wydaje mi sie ze zwykla petla while(true) wystarczy...

    0 Nie wolno! Nie wolno!
    Ujemna reputacja RLZZZZZZ!

    Piszem poprawnie po polskiemu!!!1!!11

  7. Zarejestrowany
    Dołączył: Jul 2008
    Posty: 799
    Pobieralnia
    1
    Dodane pliki
    0
    Thumbs Up/W dół
    Otrzymane: 19/0
    Dane: 81/16
    Siła reputacji: 91

    Odp: Programowanie obiektowe w PHP

    #36
    Kod php:
    ignore_user_abort(false);
    set_time_limit(0);
    while(
    true) {

    Nie twierdzę, że to jest mądre, ale "PHP da się zapętlić tak jak np. JavaScript".
    Temat zszedł trochę na coś innego, pewnie niefortunnie nazwałem do "zdarzeniami".

    0 Nie wolno! Nie wolno!
    Nie można żyć samym życiem.

  8. Zarejestrowany
    Dołączył: Jun 2010
    Posty: 230
    Pobieralnia
    10
    Dodane pliki
    1
    Thumbs Up/W dół
    Otrzymane: 17/7
    Dane: 31/27
    Siła reputacji: 33

    Odp: Programowanie obiektowe w PHP

    #37
    Troche zle to wyjasnilem. Click here to enlarge
    Mozna tez uzyc for(;Click here to enlarge, z infinite loops mialem juz w PHP stycznosc, ale to nie jest to. Nie zabardzo chce mi sie rozmowiac na ten temat, ale troche spedzilem z kartka i probowalem spisac wszystkie zalety i wady eventow w PHP, i jedynym ich plusem jaki znalazlem to uzycie ich w CMS, nic wiecej mi nie przyszlo do glowy, a co do wad mam ich troche. Piszac 'problem w tym ze PHP nie da sie zapetlic jak np. JavaScript ' mialem na mysli, ze nie ma takich mozliwosci PHP jak JS, ogolnie powinienem w noc nic pisac, bo jak czytam wlasne posty to traca sens. Wczesniejsza wypowiedz nawiazelem do prawdziwego EDP, a nie do tego jak to wyglada w PHP.

    0 Nie wolno! Nie wolno!
    Linus Torvalds: Komputer jest jak klimatyzacja - gdy otworzysz okna, robi się bezużyteczny...

    Do czego służy Internet Explorer?
    Do ściągnięcia innej przeglądarki.

Strona 4 z 4 PierwszyPierwszy ... 234

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Programowanie obiektowe + szablony.
    Przez Vrael w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 5
    Ostatni post / autor: 21-06-2013, 16:54
  2. Optymalne programowanie(ipraca.php czy action=praca?)
    Przez sopel95 w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 15
    Ostatni post / autor: 15-05-2011, 12:45

Osoby które odwiedziły tą stronę znalazły ją szukając:

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  

Partnerzy

ViaWWWGamers - portal od graczy dla graczy Yggdrasil – portal o grach

Toplisty

TOP50 Gry Internetowe RPG - gry MMO i MMORPG online Gry w przeglądarce Top Granie
facebook
G