2014-02-14 57 views
0

我使用include();来加载我的页面的某些部分,但有时如果我在特定区域工作我希望include();函数终止某个地方,所以我使用return;和该行后面的所有内容都不会包括在该文件上调用include();时。我不能使用die();,因为有时我还需要包含其他文件。PHP使用函数作为返回;?

现在,我希望能够根据其他用户看到的功能来控制该功能,例如 - 我想限制哪些类型的用户可以在包含文件中的return;行之外看到。我希望管理员级用户能够看到超出这一点,但不是普通用户。所以我使用某种if() { }语句来检查用户类型。有时我只希望自己能够查看return;一行后的内容,然后添加if($ip != $my_ip) return;

问题是我必须手动编写这些东西,但由于我经常使用它,我想写一个函数,我可以传递给用户,我想绕过return;部分。所以我设置一个terminate();功能,这样的事情:

function terminate($param) { 
    // if statement 
    { 
     return; 
    } 
} 

return;线在该功能只有函数中返回,它不会对调用该函数的文件有任何影响。换句话说,我的terminate();函数中的return;行实际上并不会执行return;我需要停止include();函数。

那么,如何阻止我的文件超越某一点与功能include();命令,并将它没有中断停止的include();后剩余的代码?

编辑:在文件

if(terminate($param)) return; 

所以通过我的参数的函数,如果返回true后(停止include();),它会return;作为一个临时补丁,我用这我包括在内。所以,它的工作原理是这样的,我只是想知道如果有可能只是有一个terminate($param);命令,将火上调用,而不在if()声明具有围绕把它包起来该功能?该文件的return;命令..

+0

'包括'是一种手术。对我来说,它应该是原子的 - 就像任何其他操作一样,它只能失败或成功。成功意味着“完全包含”。中间情况似乎很奇怪,就像“可能是它被包括了”或“它被包括了,但我们不知道它是多么完全”(并且对于“可能”的外部脚本条件是完全黑匣子)。那么为什么你需要这样的行为? –

+0

Aaah。我懂了。然后我无法想象除测试以外的其他任何方式。你可以编写很多检查userType,Ip等的函数,它返回布尔值。 if(myFuncForUserTypes($ user_id)){// included content}' –

+0

我的目标是在**文件中停止include(); **,而不是我想包含文件。它可以和'return;'一起工作,但每次我想要在包含文件的某个部分之前终止时,它的写入条件会很乏味,使用函数会更容易。此外,每次包装内容if()'都会阻止。我正在寻找一种方法让函数内的'return;'行启动'return;'调用该函数的文件,而不是它只返回**内所谓的函数。 – Matt

回答

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