我一直在阅读Matt Zandstra PHP Object Oriented Designs and Patterns并且非常喜欢一个想法,但想知道当您创建数百甚至数千个它们时它如何影响 PHP 性能。
您有一张由数千种不同类型的瓷砖组成的地图(如文明中)。您有一个通用图块,然后其他图块可能是 10 种不同类型之一。
他基本上是在说您创建一个基本图块,然后让其他图块继承以下属性:
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
}
}
您拥有构成此地图的所有不同类型的地形(在第一代时),然后循环通过数据库进行构建,如下所示:
ID | TYPE
-----------------
1 | grass
2 | mountain
3 | mountain
4 | grass
5 | lake
6 | grass
所以我想我的问题是......这与性能有什么关系?PHP 是将每个图块存储为一个大对象还是仅包含对对象定义的引用?
我只是在想,当它的地图充满了 1,000 个正方形并且我正在循环并做其他有趣的事情时,它会不会像我一直认为的面向对象编程非常庞大一样慢得疯狂。
让它程序化然后遍历方块并运行函数来决定这些会发生什么会更快吗?
只是想知道使用这样的 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 座山,是否有任何重复,或者当您调用它时,它是否只是引用类蓝图来说明它的作用.
我想它只是调用构造方法(如果有的话),然后当你需要它们时你手头有它的方法,所以它很快对吧?
谢谢, 多姆