2016-01-24 2 views
0

Мой 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"; 

Вы видите в состоянии в шаблоне/header.php я использую return, чтобы пропустить заголовок, если пользователь не зарегистрирован Я не хочу использовать else, потому что следующий код довольно длинный и вложен, поэтому я хочу избежать добавления другого уровня вложенности здесь ...

Это использование return похоже на работу правильно на PHP 5,6

Вопрос:

  • Правильно ли это, или есть более подходящий способ, чтобы пропустить оставшуюся часть файла заголовка?
  • Вы знаете какие-либо уведомления/предупреждения/ошибки, которые PHP может здесь бросить?
+2

Это возможно и "безопасно", хотя и не нормальный подход. Обычно у вас есть условие в действии вашего контроллера и имеет два разных вида: один для аутентифицированных пользователей, один для входа в систему. – arkascha

+0

Я часто использую '$ config = include '/path/to/config.php';'. С ' 'bar);', как пример файла конфигурации. И это обычная практика. – Progrock

+1

См. Http://stackoverflow.com/questions/1314162/return-from-include-file, и есть упоминание в примере примера php # 5: http://php.net/manual/en/function.include .php – Progrock

ответ

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 
?> 
1

То, что я хочу сделать, это Сбрось обычай исключение, потому что вы можете поймать исключения, даже при вызове функции с проверкой входа в него.

Возврат должен быть достаточным, если код PHP находится в вашей текущей области, но возврата недостаточно, если вы проверяете, входит ли ваш пользователь в функцию.

Чтобы продемонстрировать это, я прикрепил два файла 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"); 
} 
Смежные вопросы