[英]File Structure for a PHP Project
我的文件结构:
/holiday/admin/list.php
/holiday/includes/functions.php # common functions
/holiday/index.php
# / is the document root
# /holiday/ is a "self-contained" sub-directory
# There are other "self-contained" sub-directories e.g. /promotion/, /international/
在functions.php
我有一个通用函数来生成HTML的<head>
部分; 还有一个从文档根目录返回绝对路径的函数。 注意我尝试计算/holiday/includes/
。
<? function get_path() {
// Technically, this returns dirname(__FILE__) - $_SERVER['DOCUMENT_ROOT']
return str_replace($_SERVER['DOCUMENT_ROOT'], "", dirname(__FILE__));
} ?>
<? function open_page($head = "", $body_id = "") { ?>
<!DOCTYPE HTML>
<html>
<head>
<link type="text/css" rel="stylesheet" href="<? echo get_path() . "/../css/savvyextras.css"; ?>" />
<script type="text/javascript" src="<? echo get_path() . "/../scripts/modernizr.js"; ?>"></script>
...
<? } ?>
functions.php
是通过以下方式包含的:
// From list.php
require_once('../includes/functions.php');
open_page(...);
// From index.php
require_once('./includes/functions.php');
open_page(...);
我觉得这里必须有一种更简单的方法来完成同样的事情。 我的get_path()
任何内置的PHP函数吗? 也许我应该以不同的方式来解决我的问题?
注意:有些人建议使用框架(这是一件好事)。 但是,为了帮助我(和其他人)理解整个包括文件的内容以及其他非框架的解释?
相关讨论 :
@ Siku-Siku.Com,使用__autoload()自动加载类并不能真正解决您的主要问题。 此外,如果您转向主要面向对象的设计,您将只能充分利用__autoload(),这将带来自己的挑战。
目前,最明智的做法是@hafichuk建议。 使一个主要包含文件(例如my_funcs.inc.php)包含在其他所有页面的顶部。 优点是,通过为包含文件提供特殊的.inc扩展名,可以更轻松地区分它们。 另外,您可以使用它来阻止Apache中的这些文件,从而增加安全性。
如果我还能提到:
1)我认为短标签有风险。 它们会鼓励不良的编码习惯,并为移植噩梦敞开大门。 并且他们鼓励不良的编码习惯。
2)由于require是语句,而不是函数,因此应按以下方式使用:
require 'my_file.inc.php';
对于当前使用的布局类型,最好的选择是使用一个includes.php
所有您的require_once
调用的require_once
文件,然后在页面上使用require_once('../includes.php')
(或等效位置)每个输入脚本的顶部。 设置和维护很麻烦,但至少要放在一个地方。
如果您打算使用对象而不是函数,那么我来看看使用__autoload()
。
在对此进行更多实验并收集了其他输入之后,我发现使用Constant可以解决问题:
# functions.php
define('PREFIX', '/holiday');
<? function open_page($head = "", $body_id = "") { ?>
<!DOCTYPE HTML>
<html>
<head>
<link type="text/css" rel="stylesheet" href="<?php echo PREFIX; ?>/css/savvyextras.css"; ?>" />
<script type="text/javascript" src="<?php echo PREFIX; ?>/scripts/modernizr.js"; ?>"></script>
...
<? } ?>
因此,如果您需要将/holiday/
移至其他子目录(例如/vacation/
,则只需更改一个常量,即PREFIX
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.