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>

この種のコードは OK と見なされます。ビューには条件とループがあります。それらを避けることはできません。また、あなたが持っている場合、それはそれほどきれいに見えません

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

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
于 2014-02-14T14:26:27.923 に答える