我正在使用include();
来加载我页面的某些部分,但有时如果我正在处理特定区域,我希望include();
函数在该包含文件中的某处终止,所以我使用return;
,在该文件上调用include();
时,不会包含该行后面的所有内容。我不能使用die();
,因为有时我还需要包含其他文件。
现在,我希望能够根据其他用户看到的内容来控制return;
功能,例如 - 我想限制哪些类型的用户可以看到return;
行以外的内容在包含的文件中。我希望管理员级用户能够超越这一点而不是常规用户。所以我使用某种if() { }
语句来检查用户类型。有时我只希望自己能够在return;
行后查看内容,然后添加if($ip != $my_ip) return;
。
问题是我必须手动编写这些东西,但由于我经常使用它,我想编写一个函数,我可以传递给我想绕过return;
部分的用户。所以我设置了一个terminate();
函数,如下所示:
function terminate($param) {
// if statement
{
return;
}
}
但该函数中的return;
行仅在该函数内返回,它对调用该函数的文件没有任何影响。换句话说,我的return;
函数中的terminate();
行实际上不会执行return;
我需要阻止include();
函数超越它。
那么如何使用功能停止我的文件上的include();
命令超出某个点,并且在停止include();
后不要中断剩余的代码?
编辑:作为临时解决方案,我正在使用它:
if(terminate($param)) return;
所以在将参数传递给函数后,如果它返回true
(停止include();
),它将{i}包含在我所包含的文件上。所以它的工作方式是这样的,我只是想知道是否有可能只有一个return;
命令会在调用该函数的文件上触发terminate($param);
命令,而不必将其包裹在{ {1}}声明?..
答案 0 :(得分:0)
一般而言,大多数试图使用仅使用HTML的干净模板,遵守MVC架构等的现代项目都在其模板中使用条件。它没有错。如果你是模板看起来干净。
<div class="content">
<span class="subcontent"> some content </span>
<?php if ($app->UserController->hasPermissions($_SESSION['id'])): ?>
<span class="admincontent"> Admin Content </span>
<?php endif; ?>
</div>
这种代码被认为是好的。你的观点有条件和循环。你无法避免它们。如果你有
,它看起来也不干净<div class="content">
<span class="subcontent"> some content </span>
someFunction();
<span class="admincontent"> Admin Content </span>
</div>
这也会隐藏文件末尾的所有内容。并且很难管理它。这仍然不是不可能的。您可以使用输出缓冲区:
假设你有:
<强>的functions.php 强>
<?php session_start(); $_SESSION['user_id'] = 1; //fictive session code ?>
<?php
function hasPermissions() {
if ($_SESSION['user_id'] != 1) {
ob_end_clean();
}
}
?>
<?php ob_start(); ?>
<强> end.php 强>
<?php $ob = ob_get_contents();?>
<?php ob_end_clean(); ?>
<?= $ob; ?>
<强>的template.php 强>
<?php include("functions.php"); ?>
<p>included content</p>
<?php hasPermissions(); ?>
<p> included content 2 </p>
<?php include("end.php"); ?>
因此,如果您使用会话ID = 1并运行 Template.php 文件,则输出将为:
included content
included content 2
否则会输出
included content