Znowu o obiektowym programowaniu, ale taki problem jest również nawet podczas kodu strukturalnego.. Czytałem o wzorcach projektowych, sprawa jest dość oczywista, jednak nie widzę optymalnego rozwiązania.
Wiadomo, że trzeba oddzielać kod php od kodu html, odpowiedzialnego za wyświetlanie.
Weźmy sobie przypadek z Vallheru:
wyświetlany jest plik head.php, który wyświetla nam lewą kolumnę, dane gracza, jego punkty życia np równe 30/40.
następnie jest includowany plik battle.php, gdzie jest skrypt walki itp. Jest on wyświetlany na bierząco, jeżeli będzie unik, to wyświetla się informacja o uniku itp..
Po walce prawdopodobnie mamy inne punkty życia niż 30/40, ale niestety, to zostało już wyświetlony, więc do tego nie wrócimy.
Następnei includowana jest stopka i lista aktualnie zalogowanych graczy, która jest najbardziej "aktualna".
Taki system jest "bardzo prawdopodobnie tragiczny".
W jakichś swoich projektach używałem na początku drobnej mieszanki kodu obiektowego w php, np moja strona wyglądała w ten sposób:
Kod php:
//obiekty, klasy
<html>
<div>
<?php echo $player->getHealth();?>
</div>
<div>
<?php $battle = new battle(array(1,2), array(3, 5); ?>
walczą gracze 1 2 przeciwko 3 i 5. To załatwiało dosłownie wszystko. Wczytywało graczy, uaktualniało, na bierząco "echowałem" uniki i obrażenia.
</div>
Tutaj kod js, który uaktualniał div z punktami życia, żeby wszystko się pięknie zgadzało.
To takie tragiczne nie było, no ale jestem pewien, że da się lepiej. Mój plan, obecnie założenia:
1. ABSOLUTNIE nie używać echo w klasach. Czy to dobra praktyka?
2. BEZWZGLĘDNIE najpierw generować cały kod php, a następnie to wszystko wyświetlać.
Np.
Kod php:
<?php
$battle = new battle();
$battle->addCharacter('id1', 'team1', 'player');
$battle->addCharacter('id3', 'team2', 'monster'); //wiadomo, że liczby, chodzi mi o ukazanie pomysłu i za co odpowiadają poszczególne argumenty.
$battle->fight();
?>
<html>
<div>
<?php echo $player->getHealth(); ?>
wyswietlanie zycia gracza. Pieknie, aktualne i w ogóle przyjazne.
</div>
<div>
Jeżeli to walka, to muszę jakoś tę walkę wyświetlić.. Tu jednak pojawia się problem.
</div>
Jedyne co mi przychodzi do głowy to tworzenie olbrzymiej zmiennej, która mi to wszystko zachowa.
Mogę też jakoś zapisać całą walkę do bazy danych, żeby potem się nią dzielić z innymi graczami czy coś. Fajna sprawa, tak mi się wydaje i rozwiązuje problem.
Tylko raczej zapisywałbym wtedy całą walkę na chama, bo trzymanie ziarna to nie wszystko - trzeba pamietac jakie zdolnosci, przedmioty ktos mial aktualnie i to nie jest łatwe do ogarnięcia..
Zakładki