将PHP includes()存储到内存中


Storing PHP includes() into memory

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

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

要实现这一点,我将遍历行和单元格并包含("edit_color.php"或"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。还有其他选择吗?

用函数代替。

。你有

直接给

<?php
    echo 'hello from foo';

你包含了无数次。取而代之的是:

直接给:

<?php
function foo() {
   return 'hello from foo';
}

包含一次,然后在需要的地方调用foo():

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

这是作为一个web应用程序?

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

例如,如果你正在使用Apache:http://httpd.apache.org/docs/2.2/caching.html

简短的答案是使用include_once()

然而,你不应该在循环中包含这样的代码——这是非常糟糕的形式。

你应该使用include_once和autolloading…(以及表示和代码的分离,但在这里解释太多了)。