我的PHP应用程序如下所示:
<?php
// File: index.php
// some code...
include( 'template/header.php' );
// More code, for example:
echo "Subscribe to our newsletter here: ...";
和模板文件:
<?php
// File: template/header.php
$user = get_loggedin_user()
if ( ! $user ) {
echo 'Please log in';
return; // Question is about this statement!
}
// Long PHP code follows, for simplicity reduce it to:
echo "You are logged in as $user";
你在template / header.php的条件中看到我使用return
来跳过标题,如果用户没有登录。我不想使用else
,因为后面的代码是相当的long和nested,所以我想避免在这里添加另一个嵌套级别...
return
的这种用法似乎在php 5.6上正常工作
问题:
答案 0 :(得分:1)
我喜欢做的是提出一个自定义异常,因为你可以捕获异常,即使你在其中调用了一个带有登录验证的函数。
如果PHP代码在当前范围内,则返回应该足够,但在验证用户是否在函数中登录时,返回是不够的。
为了证明这一点,我附上了2个PHP文件,index.php文件,我假设是你正在执行的文件和一个名为func.php的函数文件。
的index.php
<?php
require('func.php');
try {
$user = get_loggedin_user();
} catch(NotLoggedInException $e) {
echo 'do your redirect here';
die();
}
var_dump($user); // shows user value
func.php
<?php
class NotLoggedInException extends Exception {
}
function get_loggedin_user() {
throw new NotLoggedInException("User is not logged in");
}
答案 1 :(得分:0)
简短回答:是
可能,安全,官方支持。
成功包含,除非被包含文件覆盖,否则返回1.可以在包含文件中执行return语句,以终止该文件中的处理并返回调用它的脚本。此外,还可以从包含的文件中返回值。
示例:
<?php
// return.php
$var = 'PHP';
return $var;
?>
<?php
// noreturn.php
$var = 'PHP';
?>
<?php
// Test script
$foo = include 'return.php';
echo $foo; // prints 'PHP'
$bar = include 'noreturn.php';
echo $bar; // prints 1
?>