我正在为我的公司开发一个网络应用程序。该应用程序用于跟踪我们购买(和使用)的工具。
公司中的员工每次使用工具时都会在应用程序(mysql db)中注册。
到目前为止,我都是以过程风格编写代码。我仍然是 OOP 的新手,我的程序代码运行良好并且相对较快。
现在应用程序变得越来越大,我在维护旧的编码模式方面确实遇到了问题,所以我认为是时候继续前进并尝试实现 OOP 了。我现在面临的问题是,我以某种方式创建了我的类,因此应用程序的速度比以前慢了 10 倍。我的其中一个页面需要 1 秒才能加载 - 如果没有类,则需要 0.1 秒。
我使用 php microtime 来衡量这一点。
我创建了一个 Company 类,其中包含每个公司的属性。
班级片段:
class Company {
private $companyId;
private $name;
private $cvr;
etc…..
private $tools = array();
}
到目前为止,它正在按预期工作。现在我想创建一个方法来获取所有 companytools 并将其附加到 $tools 数组。
public function tools() {
$purchases = $db
->table('CompanyTools')
->select(
'id'
)
->where('CompanyTools.companyId', '=', $this->companyId)
->get();
$objects = array();
foreach ($purchases as $purchase) {
$objects[] = new CompanyTool($purchase['id']);
}
$this->tools = $objects;
return $this->tools;
}
现在,当我像这样使用它时,我遇到了前面提到的性能问题
foreach ($company->tools() as $purchase) {
echo $purchase->id;
}
我怀疑这与创建 CompanyTool 类的新实例的循环有关。 CompanyTool 类看起来像这样
class CompanyTool {
function __construct($id = null) {
if(!$id) die("We need the id");
$this->id = $id;
$attributes = $db
->table('CompanyTools as ct')
->select(
'ct.*'
)
->where('ct.id', '=', $this->id)
->take(1)
->get();
foreach($attributes as $attribute)
foreach ($attribute as $key => $value) {
if(property_exists($this, $key)) $this->{$key} = $value;
}
return $this;
}
我希望我想要实现的目标以及我缺乏 OOP 知识是显而易见的:)
感谢您的输入
/ j