php 类的性能损失

2024-01-12

我正在为我的公司开发一个网络应用程序。该应用程序用于跟踪我们购买(和使用)的工具。

公司中的员工每次使用工具时都会在应用程序(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


您可以进行简单的重新排列,这应该可以节省一些周期:

// get all fields in this query
$purchases = $db
  ->table('CompanyTools')
  ->select('ct.*')
  ->where('CompanyTools.companyId', '=', $this->companyId)
  ->get();

foreach ($purchases as $purchase) {
    // and pass each row to the constructor
    $objects[] = new CompanyTool($purchase);
}

// ====
class CompanyTool 
{
    function __construct(array $attributes) 
    {
        if (!isset($attributes['id'])) die("We need the id");

        // no need to perform any query here
        foreach ($attributes as $key => $value) {
            if (property_exists($this, $key))  $this->{$key} = $value;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 类的性能损失 的相关文章

  • 运行没有扩展名的 PHP 页面

    我想在 apache Web 服务器上运行我的 PHP 网页 而不需要 php扩大 所以我添加了以下代码 RewriteEngine on RewriteBase Rewritecond REQUEST URI NC RewriteRule
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 自定义 WP 主题时,我应该将导航栏放在“”标签之前还是之后?

    我正在通过制作子主题来自定义 WP 主题 我将 Bootstrap 中的导航栏放入子主题目录中的 header php 文件中 但是 我不确定在哪里放置导航栏代码 我可以把它都放在前面and之后标记成功 例如 无论我选择哪一个 导航栏都显示
  • Smarty输出空白页

    已解决 模板文件错误 我有这样的 Smarty 设置 require once smarty Smarty class php smarty new Smarty smarty gt compile dir compile dir smar
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • 如何将 HTML 转换为 Markdown?

    我有一个类似 stackoverflow 的网站 有一个文本区域 人们可以在其中写答案 我用这个 PHP 库 http parsedown org 转换降价 我的意思是我使用该函数来转换 italic to i italic i inclu
  • 如何只获取父类对象的属性

    我有两节课 class Parent object def init self id name self id id self name name self parent vars id name make a copy def print
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 使用 php 在多维数组中按键排序[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中对多维数组进行排序 https stackoverflow com questions 2059255 sorting multidimensional array in php 如何在
  • 在 Symfony 序列化中更改序列化属性名称

    我正在使用 Symfony 序列化器 效果很好 use Symfony Component Serializer Annotation Groups Groups default notification public function g
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • PHP Solr PECL 扩展安装

    我已经使用命令安装了 pecl solr pecl install solr 和梨使用 wget http pear php net go pear phar php go pear phar 重启Apache后 我仍然收到错误 Fatal
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • Laravel 扩展 TestResponse 类

    我正在尝试添加自定义断言TestReponse https laravel com api 5 5 Illuminate Foundation Testing TestResponse html类所以我可以做这样的事情 response t
  • 如何使多个带有 OR 的 LEFT JOIN 完全使用复合索引? (第2部分)

    它用于计算用户进入 离开工作场所时如何扫描指纹的系统 我不知道它的英文怎么称呼 我需要确定用户是否早上迟到 以及用户是否提前下班 This tb scan表包含用户扫描指纹的日期和时间 CREATE TABLE tb scan scperc
  • Swift:如何使用关联的应用程序打开文件?

    我喜欢在 macOS 上使用 Excel 打开 xls 文件 我只找到了 C 的示例 但没有找到 Swift 的示例 附加问题 即使该文件扩展名与 Excel 无关 是否也可以使用 Excel 启动该文件 有NSWorkspace shar
  • linux内存初始化时内核CPU使用率高

    在服务器上引导我的 java 应用程序时 我遇到了 Linux 内核 CPU 消耗高的问题 此问题仅发生在生产中 在开发服务器上一切都是光速 upd9 关于这个问题 有两个疑问 如何修复它 名义动物建议同步并删除所有内容 这确实有帮助 su
  • Delphi XE3 WM_HOTKEY 如何判断HotKey何时被释放?

    我正在尝试在一个并不总是有焦点的通信程序中编写一个 咳嗽按钮 我有用于使麦克风静音和取消静音的代码 MMDevApi 它工作得很好 我设置了一个全局热键 这非常适合设置静音 现在问题来了 如何判断热键何时被释放 我尝试了代码中所示的计时器
  • C 标准库的更安全替代品

    C 标准库在 I O 安全方面是出了名的差劲 许多函数都有缓冲区溢出 gets scanf 或者如果没有给出正确的参数 scanf 等等 每隔一段时间 我就会遇到一位有进取心的黑客 他编写了自己的库 但没有这些缺陷 您见过的这些库中最好的是
  • 如何制作莫里斯条形图动画?

    我正在尝试对莫里斯条形图进行动画处理 莫里斯条形图已显示 但我想要每个条形的动画和不同的颜色 我的代码是 success function response body css cursor default if response statu
  • Webpack 4 模块解析失败:意外字符“@”(1:0)

    当我尝试运行时出现此错误npm run dev将我的 scss 编译为 css 我知道这个问题与 import src scss main scss 中出现错误 模块解析失败 意外字符 1 0 您可能需要适当的加载程序来处理此文件类型 导入
  • 将自定义列表视图与 TextView 和 CheckBox 一起使用,并单选 CheckBox

    听说我使用自定义ListView with TextView and CheckBox 但我希望一次在复选框中进行单一选择 一CheckBox选中后另一项取消选择 使用 BaseAdapter 但这段代码不能正常工作 请给我建议 thnks
  • 如何按照 PKCS#11 将 Microsoft Crypto API 与 USB 适配器一起使用

    我有一家公司提供的 safenet 身份验证 USB 令牌 他们告诉我他们里面有数字公钥证书 他们给了我一个密码和一个软件 通过它我可以看到它可以检测里面的证书 现在我需要访问此令牌的证书 然后我需要使用我的开发代码进行签名 加密和解密 但
  • 如何使用 javascript 或任何库检查用户是否在线?

    我需要一些关于如何使用检查互联网连接的帮助JavaScript or jQuery或任何可用的图书馆 因为我正在开发一个离线应用程序 如果用户离线 我想显示一个版本 如果用户在线 我想显示另一个版本 目前我正在使用这段代码 if navig
  • Pandas 根据条件移动列数据

    I have dataframe看起来像这样 Name Val Rating 0 ABC 123 B 1 DEF 234 B 2 567 B NaN 3 GHI 890 D 但我想通过检查来移动数据 col Name 到下一栏 col Va
  • 将数据从 BeautifulSoup 导出到 CSV

    免责声明 我已经阅读过该领域的许多其他答案 但它们似乎对我不起作用 我希望能够将抓取的数据导出为 CSV 文件 我的问题是如何编写将数据输出到 CSV 的代码 当前代码 import requests from bs4 import Bea
  • t-SNE 在不同的机器上产生不同的结果

    我有大约 3000 个 100D 数据点 我用 t SNE 将它们投影到 2D 每个数据点属于三个类别之一 但是 当我在两台不同的计算机上运行脚本时 我不断得到不一致的结果 当我使用随机种子时 预计会出现一些不一致 但是其中一台计算机不断获
  • 如何通过运行时类型抛出异常?

    我想调用一个可能抛出异常的函数 如果它确实抛出异常 我想捕获它并将异常对象传递给处理函数 处理函数的默认实现只是简单地抛出异常 这是用来说明问题的精简代码 struct base exception exception char const
  • 如何向 StringBuilder 添加一定数量的空格?

    如何向 StringBuilder 添加一定数量 1 到 100 之间 的空格 StringBuilder nextLine new StringBuilder string time Util CurrentTime nextLine A
  • 如何(以编程方式)判断是否有/没有任何支持打开特定文档类型的注册应用程序?

    Apple 的 UIDocumentInteractionController PresentOpenInMenuFromBarButtonItem animated 方法文档指出 如果没有注册的应用程序支持打开文档 则文档交互控制器不会显
  • Android 清单 POST_NOTIFICATIONS 缺少导入

    尝试实现 android 13 或 提拉米苏 的通知权限 但未能获得该权限的导入 现在 目标SDK版本为32 编译SDK版本为32 我也在清单中声明了它 如下所示
  • elixir 中嵌套列表和结构的 get_in

    我有一个结构 s a Bla b c 我要拿c从中获得价值 我正在尝试做 get in s a b 但它并不是为了从结构中获取价值而设计的 有没有类似的东西可以让我获取c从带有嵌套结构的列表中 As 有记录的 https hexdocs p
  • php 类的性能损失

    我正在为我的公司开发一个网络应用程序 该应用程序用于跟踪我们购买 和使用 的工具 公司中的员工每次使用工具时都会在应用程序 mysql db 中注册 到目前为止 我都是以过程风格编写代码 我仍然是 OOP 的新手 我的程序代码运行良好并且相