PHP是否缓存include
个请求?我想知道如何清理我的代码,并考虑使用更多includes
。请考虑以下方案。
[foreach answer] [include answer.tpl.php] [/foreach]
这需要包括answer.tpl.php
数百次。
是否缓存?它会对性能有影响吗? 这被认为是一种好习惯吗?坏?
回应@Aaron Murray回答
不,那不行。仅_once
的概念是防止不止一次包含同一文件。 (以防止由例如覆盖常量值引起的错误)
实际例子如下:
# index.php
<?php
$array = array('a', 'b', 'c');
$output = '';
foreach($array as $e)
{
$output .= require_once 'test.php';
}
echo $output;
# test.php
<?php
return $e;
答案 0 :(得分:7)
PHP是否缓存
include
个请求?
据我所知,PHP默认不缓存包含。但您的底层文件系统可能会这样做。因此,在你的例子中一遍又一遍地访问同一个文件应该是非常快的。
如果遇到实际问题,首先需要对应用程序进行概要分析,以找出实际瓶颈所在。因此,除非您没有遇到任何问题,否则我会考虑使用包含无害。
关于良好做法,我认为在本文中对此进行了很好的解释:When Flat PHP meets Symfony。
这不是高设计,只是为了展示如何开始使模块更加模块化的图片。您应该能够从包含文件中获取代码1:1,只需注意所有需要的模板变量都会传递给函数(不要使用全局变量,它迟早会阻挡你的方式):
# in your answer.tpl.php
function answer_template(array $vars) {
extract($vars);
... your template code ...
}
# your script
array = array('a', 'b', 'c');
$output = '';
require('answer.tpl.php');
foreach($array as $e)
{
$output .= answer_template(compact('e'));
}
echo $output;
答案 1 :(得分:5)
您是否考虑过:
require_once('answer.tpl.php')
or
include_once('answer.tpl.php')
当然,您可以将“必需”文件仅包含在您希望它们包含的脚本中(仅限于它们确实需要的位置)。
修改:修改后的答案:
index.php - &gt;
require_once('answer.php');
echo answer(); // This function can be called from anywhere in the scripts.
answer.php - &gt;
function answer() {
return '<div>This is the answer</div>';
}
另外在旁注中你可以在你的函数中使用输出缓冲来捕获你的answer.php中的HTML(稍微清晰的分离HTML和php的方法)。
回应上面的例子:
<?php
require_once('test.php');
$array = array('a', 'b', 'c');
$output = '';
foreach($array as $e)
{
$output .= test($e);
}
echo $output;
<?php
function test($param) {
return $param;
}
答案 2 :(得分:2)
此主题之前出现过,所以这里有一些可能的重复(不支持任何;大部分是部分答案,但仍然是相关的阅读):
嗯,这些都没有具体回答你的问题。我们在某个地方有一点性能基准,但我找不到它。
(就我个人而言,我经常将我的代码整理成将整个应用程序合并到一个blob文件中,然后剥离空白,以避免多个文件访问,即使APC在那里也是如此。)