Sven Rautenberg: Projekt: Christmas-Battle - Beta 1

Beitrag lesen

Moin!

automatische Init möglich

Das ging ja beim "normalen" include()-Konzept auch schon. Hab ich auch immer so gemacht. Als alter Pascal-Unit-Schreiber steckt das eben drin.

Ist aber in diesem Fall nochmal grundsätzlich etwas anderes.

Eine Pascal-Unit ist (wenn ich mich noch richtig erinnere) ein Block extern ausgelagerter Prozeduren und Funktionen, die eingebunden werden können, um die Funktionalität zu erweitern. Also beispielsweise bei den klassischen Standard-Units, um I/O zu machen, clearscreen etc.

Eine PHP-Klasse _kann_ sowas auch machen. Dazu würde man die Klasse dann statisch verwenden und die implementierten Methoden mit classname::methodname() aufrufen. Das ist dann im Prinzip identisch mit normalen Funktionen (und sicherlich gibts da noch interessantere Sachen, die ich noch nicht erforscht habe). Was das OOP-mäßige an Klassen angeht, ist eben der Konstruktor.

Beispielsweise (um beim Schiffeversenken zu bleiben) könnte man das Spielfeld aus einem Array von Objekten zusammensetzen, welche ihrerseits dann fast alles regeln, was beispielsweise für die Bilddarstellung zuständig ist. Also besteht das Spielfeld dann auf lauter Objekten "Feld", welche beispielsweise Methoden für "output_picture()", "shoot()", "set_boat()", "storm()" etc. mitbringen könnten.

Und um das Spielfeld mit den Objekten zu füllen, würden logischerweise die Objekte einzeln instantiiert, wobei _jedesmal_ der Konstruktor aufgerufen würde. So könnte man direkt bei der Objekterstellung per Parameter schon mal den Feldtyp festlegen: $feld[1][4] = new feld(23); sorgt dann dafür, dass Feldtyp 23 initialisiert wird, im Gegensatz zu den 22 anderen Typen, die es gibt. Also praktisch Initialisierung mit variablen Parametern.

Das kannst du mit Includes alles nicht wirklich machen, ebenso wie es auch mit Units nicht funktionieren würde (wenn ich mich da richtig erinnere).

Dynamische Speicherverw. über Standard (8Mb)
Bin ich noch nicht drangestoßen.
Das würde mich noch sehr interessieren, ob es geht. Und zwar Allokation von zus. Speicher, der direkt dem Betriebssystem untersteht.

Wozu Speicher allokieren? Gewöhnlich verwaltet PHP den Speicher doch für einen - und das nicht allzu schlecht. Aber wenn du unbedingt willst: PHP bietet bestimmt auch dafür ein Interface, um eigene Speicherblöcke anzufordern. Die ließen sich sicherlich auch zur IPC verwenden. Aber es würde kaum funktionieren, zwischen zwei Apache-PHP-Instanzen zweier Spieler direkt zu kommunizieren - dazu bräuchtest du irgendeinen Daemon, der zusätzlich auf dem Server läuft. Kommunikation über eine Datenbank zwischen zwei Sessions funktioniert aber beispielsweise auch ganz wunderbar - da ist die DB eben der Daemon, der die IPC realisiert (allerdings unter ziemlich hohen "Kosten").

Wäre nett, wenn das jemand qualifiziert beantworten könnte.
Ich hab mir Mühe gegeben. :)
Jau, und mich damit wieder ein bisschen mehr motiviert, nun auch mal endlich umzustellen. Lulus Code-Beispiel ist zudem auch sehr schön leicht lesbar, weil sauber geschrieben.

Ich habe am Quellcode mindestens eine wichtige Kritik: Die Bildlinks stehen direkt in der Klasse, und das halte ich für böse. In der Klasse für die Verwaltung der Spielfelder etc. gehört IMO keinerlei HTML hinein. Die Umsetzung von Spielzuständen in ein Ausgabeformat sollte Sache einer Templateklasse sein. Dann wäre die notwendige Flexibilität erreicht. Weil man ja eher nicht an der Klasse direkt herumändern sollte, aber möglicherweise Dinge wie andere Bildnamen, feste Angaben der Bildgröße oder alt-Texte haben will.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)