0

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();),它将return;在我包含的文件上。所以它是这样工作的,我只是想知道是否有可能只使用一个terminate($param);命令来触发return;调用该函数的文件上的命令,而不必将其包装在if()语句中?

4

1 回答 1

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>

这也将隐藏所有内容直到文件末尾。而且很难管理。这仍然不是不可能的。您可以为此使用输出缓冲区:

假设您有:

函数.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(); ?>

结束.php

<?php $ob = ob_get_contents();?>
<?php ob_end_clean(); ?>
<?= $ob; ?>

模板.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
于 2014-02-14T14:26:27.923 回答