什么';PHP的最佳实践是什么?

什么';PHP的最佳实践是什么?,php,Php,我想让专家们给我一些用PHP组织代码的建议。通常我会将代码分解成多个文件,然后include()

我想让专家们给我一些用PHP组织代码的建议。通常我会将代码分解成多个文件,然后
include()这是一个相当大的问题,我相信人们喜欢不同的东西。一般来说,有一个索引页面,页面根据请求被包含(大多数情况下使用一个开关来防止文件包含攻击)

包含的页面还具有一个已定义的常量,该常量将被选中,以确保它们不能单独执行

我总是喜欢使用模板系统(实际上是一个php系统,一个非常快速的系统),并且我使用MVC类型(模型-视图-控制器)组织我的代码。例如,我创建了user.php、user.class.php和用户模板(用户是控制器,类是模型,模板是视图)

编辑-来自旧项目的索引页示例(缩小以仅显示点) 顺便说一句,这一次我用的是Smarty

<?php
define('game',1);

session_start();

require_once 'libs/smartySetup.php';
require_once 'libs/containers/utils.class.php';
require_once 'login.php';

$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 'home';
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';

switch($page)
{
    case 'home':       break;    // unlogged 
    case 'register':   break;    // unlogged
    case 'town':       break;
    default:
        $page = 'home';
}

include("$page.php");


?>

关于自动加载器的评论:

查看

您可以看到,自动加载器可以“爬行”到“查找”类的目录中


您可以将其设置为爬网目录(如建议的,以及Zend happend等MVC中的设置),创建类,如Connector.class.php,该类放在site/DB/文件夹中,称为:new DB_Connector()

使用自动加载器而不是所有这些手册中包含的东西,肯定会让您的工作更轻松you@mark-为了更好地理解,你能给我提供一个示例代码片段吗?你能发布一些你的代码吗?这会更容易给你一些建议。@michiel-
这里我包括两个文件,其中包含整个程序的代码片段。现在,对于codesegment1.php中的eg:
。在codesegment2.php中:
第一个问题可能是您是按程序编写代码,还是使用OOP。如果是前者,那么您可能只需要执行一个目录循环并加载(例如)glob()返回的每个文件。如果是后者,则spl_autoloader(工业回复中的链接)将在需要时自动包含类文件。先生,由于我仍然是编程方面的学习者,请编辑您的答案,并提供一些插图和代码片段,以供我帮助。希望你不介意。我正在粘贴我的一个老项目的示例索引页。哦,谢谢你的代码。这很有用。请注意,出于安全目的,包含的页面(如town.php)必须以“if(!defined('game'))die('Access Denied');”开头。包含的页面还有一个已定义的常量,该常量会被检查,以确保它们不能单独执行”-我建议只在非索引文件中定义类,每个文件1个类。这是唯一应该放在非索引文件中的代码。唯一的例外是配置文件,它将为整个系统设置环境——设置常量、错误报告、时区等,这将使代码更加“结构化”。这也意味着代码必须以某种方式从索引文件“触发”才能实际执行某些操作,因此不会有单独执行的威胁。