【问题标题】:Storing PHP includes() into memory将 PHP 包含()存储到内存中
【发布时间】:2017-07-26 15:59:05
【问题描述】:

我正在构建一个动态表格,该表格可根据其中的数据类型进行编辑和格式化。例如,带有颜色的列,带有评级的列,以及带有日期的列。

存储在数据库中的数据是文本(#009900 OR 4 OR 1435856109),但信息的类型将决定其显示和编辑方式。单击颜色单元格打开颜色选择器,单击日期打开日历日期选择器等。

为了实现这一点,我将遍历行和单元格并包含 ("edit_color.php" OR "edit_date.php") 以调出正确的编辑器。当每个单元格包含数十或数百行一遍又一遍地包含一个单独的 php 文件时,就会出现问题。

有没有办法将文件包含一次到内存中,然后一遍又一遍地使用其中的代码,而不必在每个单元循环中都包含它?

这是代码的基本思路

<table>
<?php 
    foreach ($rows as $row){
     echo "<tr>";
     foreach ($cells as $cell){
         echo "<td>";
         include ("/cells/edit_".$cell->type.".php");
         echo "</td>";
     }
    echo "</tr>";
    }
<table>

//edit_date.php\\
<div class="cell_name"><?php echo date("D-M-Y",$cell->data)?></div>
<a href="#" onClick="openCalendar()">Pick Date</a>

还有很多事情要做,但我不想在每个单元格中都包含每个 edit_[type].php。还有哪些其他选择?

【问题讨论】:

  • 或者你可以使用像一个理智的人这样的功能。
  • Theres a lot more going on but I don't want to have to include each edit_[type].php for every cell. What other options are there? 这应该可以正常工作,并且通常简单且高效。如果您遇到麻烦,则可能是您的代码中存在某种内存泄漏。

标签: php loops html-table include


【解决方案1】:

改用函数。

例如你有

foo.php

<?php
    echo 'hello from foo';

你包括了 bajillion 次。相反,有这个:

foo.php:

<?php

function foo() {
   return 'hello from foo';
}

包含此 ONCE,然后在需要时致电foo()

<td><?php echo foo(); ?><</td>

【讨论】:

  • 是否可以加载包含文件中的数据以在函数调用中使用?重要的原因是可能有 20 种不同的数据类型,其中一些具有复杂的显示/编辑规则。创建一个函数来处理所有带有大型 switch 案例的异常和规则将是一个非常长的函数。
  • include 本质上就像您包含的任何内容都被剪切并粘贴到您正在执行包含的位置一样。
  • 谢谢。如果我在我的函数中使用include,并且每次迭代都调用我的函数,那么它不会在每次调用函数时都重新包含文件吗?
【解决方案2】:

这是作为网络应用程序提供的吗?

如果是,您可能想探索在 Web 服务器级别缓存文件,而不是直接在 PHP 中。

例如,如果您使用的是 Apache: http://httpd.apache.org/docs/2.2/caching.html

【讨论】:

  • 一旦文件被缓存,它可以像任何其他文件一样被包含,但服务器资源使用更少?
  • 我不是非常精通缓存各种网络服务器的细节,但这是一般的想法。磁盘读取是迄今为止典型 Web 请求中最昂贵的部分。 Apache 应该足够聪明,可以自动在内存中缓存常用文件,不过我不确定实现细节。
【解决方案3】:

简短的回答是使用 include_once()。

但是,您永远不应该在这样的循环中包含代码 - 这是一种非常糟糕的形式。

您应该使用 include_once 和自动加载...(以及演示和代码的分离,但这里解释的太多了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多