繁体   English   中英

PHP项目的文件结构

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM