我一直在阅读Matt Zandstra PHP Object Oriented Designs and Patterns,并且非常喜欢这个想法,但是想知道当你创建数百甚至数千个PHP效果时它会如何影响PHP性能。
你有一张由数千种不同类型的瓷砖组成的地图(比如文明)。 你有一个通用的瓷砖,然后其他瓷砖可能是10种不同类型之一。
他基本上是说你创建了一个Basic tile,然后让其他tile继承了以下属性:
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是否将每个tile存储为一个大对象,还是只包含对象定义的引用?
我只是想着它的地图上有1000个正方形而且我正在循环并做其他爵士乐的东西,它会变得疯狂,因为我一直认为面向对象的编程非常笨重。
让程序然后遍历正方形并运行函数以决定这些会发生什么变得快得多吗?
一般想知道使用这样的OO设计/模式时的性能是什么样的?
编辑:我的意思是OO和Procedural循环是这样的:
// 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座山有任何重复,或者当你来调用它时,它是否仅仅引用了类蓝图它在做什么。
我想它只是调用构造方法(如果有的话),然后你需要它时就有它的方法,所以它很快就对了吗?
谢谢,Dom