使用return来跳过其余的php文件是否安全?

时间:2016-01-24 19:08:12

标签: php

我的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上正常工作

问题:

  • 这是正确的,还是有更合适的方法来跳过其余的头文件?
  • 你知道PHP可能在这里发出的任何通知/警告/错误吗?

2 个答案:

答案 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
?>