私はMattZandstraPHPオブジェクト指向のデザインとパターンを読んでいて、アイデアがとても気に入りましたが、数百から数千もの作成時にPHPのパフォーマンスにどのように影響するのか疑問に思いました。
あなたは何千もの異なるタイプのタイルからなる地図を持っています(文明のように)。あなたは一般的なタイルを持っていて、他のタイルは10の異なるタイプの1つである可能性があります。
彼は基本的に、基本タイルを作成してから、他のタイルに次のようなプロパティを継承させると言っていました。
abstract class Grass {
public movementSpeed = 1;
public function getMovementSpeed () {
return this.movementSpeed;
}
}
class Hill extends Grass {
public movementSpeed = 0.5;
}
class Mountain extends Grass {
public movementSpeed = 0.3;
}
class Lake extends Grass {
public movementSpeed = 0.6;
public function seaMonster () {
// Kill between 0.2 - 0.4x of units with sea monster
}
}
このマップを構成するさまざまなタイプの地形がすべてあり(第1世代の場合)、データベースをループして次のように構築します。
ID | TYPE
-----------------
1 | grass
2 | mountain
3 | mountain
4 | grass
5 | lake
6 | grass
だから私の質問は...これはパフォーマンスとどのように関係するのでしょうか?PHPはすべてのタイルを大きなオブジェクトとして保存しますか、それともオブジェクト定義への参照を含むだけですか?
何千もの正方形でいっぱいのマップがループしていて、他のジャジーなことをしているとき、私はちょうど考えています。オブジェクト指向プログラミングはかなりかさばるといつも思っていたので、それは非常に遅くなりますか。
手続き型にしてから、正方形をループして関数を実行し、これらで何が起こるかを判断する方がはるかに速いでしょうか?
このようなOOデザイン/パターンを使用した場合のパフォーマンスは一般的にどのようなものか疑問に思っていますか?
編集:OOと手続き型ループの意味は次のようなものです:
// Procedural
$tiles = array();
// Loop through DB of tiles
$tiles[] = $row->type;
$speed = getSpeed($tiles[0]);
// OO
$map = new Map;
// Loop through DB of tiles
switch ($row->type) {
case 1:
$map->addTile(new Plains);
break;
case 2:
$map->addTile(new Mountain);
break;
}
$tile = $map->getTile(0);
$speed = $tile->getMovementSpeed();
ご覧のとおり、OOメソッドは本当に理にかなっています。マップにタイルを入力していますが、2つの山の場合、何らかの重複があります。または、それを呼び出すと、クラスの青写真を参照して何をしているのでしょうか。 。
コンストラクトメソッド(ある場合)を呼び出すだけで、必要なときに手元にあるメソッドがあるので、かなり迅速ですよね?
ありがとう、ドム