纠正前端控制器中代码的顺序


Correct order for code in Front Controller?

我有一个设置页面内各种元素的前端控制器。然而,我突然想到,也许有些元素的顺序不对;我的意思是,有些元素可能需要在其他元素之前使用/声明。

或者,换句话说:我是否以最好/正确的方式组织了文件。例如session_start()应该出现在ini_set()之后,等等。

ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.use_trans_sid', 0);
$mytimeout = 720 * 60; // (12hrs*60m=720) // minutes * 60
session_set_cookie_params($mytimeout);
$sessdir = "../application/data"; 
ini_set('session.save_path', $sessdir);
session_cache_expire($mytimeout / 60);
ini_set('session.gc_maxlifetime', $mytimeout);
session_start();
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
require_once('../application/models/front.php');
require_once('../application/models/icontroller.php');
require_once('../application/models/view.php');
require_once('../application/models/db.php');
require_once('../application/models/sconfig.php');
require_once('../application/models/acl.php');
require_once('../application/controllers/index.php');
require_once('../application/controllers/user.php');
require_once('../application/controllers/error.php');
require_once('../application/controllers/blog.php');
require_once('../application/controllers/about.php');
function exception_handler($exception) {
  echo "Sorry something went wrong; And or we couldnt find what you requested.<br />We suggest you go back to our <a href='"/'">home page</a> and try again.<br />We have logged this request in order to provide a better service.<br /> *** ". $exception->getMessage()." ***";
}
set_exception_handler('exception_handler');
$fc = FrontController::getInstance();
$c=$fc->getController();
$a=$fc->getAction();
$users=ACL::getInstance();
$sid=session_id();
if(isset($_SESSION['HTTP_USER_AGENT'])){
  if($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])){
    session_regenerate_id(TRUE);
    $_SESSION=array();
    $users->removeUser($sid);
    if(($c!='error')&&($a!='badsession')){
      $fc->redirect("error/badsession");
    }
  }
}
else{
  $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}   
$dbh=DBConnection::getInstance();
setcookie('ct', 1,0,"/");
$config = Configuration::getInstance();
$cf=array();
$cf=$config->getall();
$users=ACL::getInstance();
$users->addUser();
$users->removeOld();
$front = FrontController::getInstance();
$front->route();
echo $front->getBody();

顺序可以稍微调整一下。这就是我选择的顺序:

  1. 首先,我会将error_reporting调用放在顶部,这样您就可以按照预期报告所有错误。
  2. 然后设置exception_handlerexception_handler,这样就可以捕获所有内容。
  3. 所有ini_set呼叫。
  4. require所有必要的脚本。
  5. session_start启动会话。如果以上一切顺利的话。
  6. 执行其他逻辑

注意

使用单例不是一个好主意。尤其是在你使用它们的时候。单身人士到底有什么不好?最好忘掉单例的用法。我很遗憾地说,单例会让你对代码设计粗心大意。它显示在您的示例中:-)