PHP使用函数作为返回;?

时间:2014-02-14 13:48:29

标签: php php-include

我正在使用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}}声明?..

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