如何处理php中不同文件的“单独包含”?

时间:2012-05-16 16:36:06

标签: php include require include-path

index.php文件有很多包含文件,其中一些包括文件,有些变量属于index.php包含的文件。可以只写“包含代码”到{{1文件或插入“包含代码”所有index.php文件包含的单独文件?可能很难理解我写的内容,但这里是我的文件夹和代码:

我的文件夹和文件在这里:

index.php

我的initialize.php就在这里:

/
|
+ includes/
|   |
|   + initialize.php
|   + functions.php
|   + config.php
|
+ layouts/
|   |
|   + header.php
|   + sidebar.php
|   + content.php
|   + footer.php
|
+ images/
|   |
|   + image1.jpg
|
+ index.php

这是function.php

//initialize.php

<?php
defined('DS') ? null : define('DS', '/');

defined('SITE_ROOT') ? null : 
define('SITE_ROOT', '/webspace/httpdocs');

defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes');

require_once(LIB_PATH.DS.'config.php');

require_once(LIB_PATH.DS.'functions.php');

?>

以下是content.php的一部分

//function.php

<?php
function include_layout_template($template="") {

    include(SITE_ROOT.DS.'layouts'.DS.$template);
}

function __autoload($class_name) {
    $class_name = strtolower($class_name);
        $path = LIB_PATH.DS."{$class_name}.php";
        if(file_exists($path)) {
           require_once($path);
        } else {
    die("The file {$class_name}.php could not be found.");
   }
}
?>

这是index.php:

//content.php

 <img src="<?php echo SITE_ROOT.DS.'images'.DS.'image1.jpg' ?>" />

所以,我的问题是,content.php中的代码:

//index.php

<?php require_once "includes/initialize.php";?>
<?php include_layout_template("index_header.php"); ?>
<?php include_layout_template("sidebar.php"); ?>
<?php include_layout_template("index_content.php"); ?>
<?php include_layout_template("footer.php"); ?>

不起作用。因为该文件无法识别<img src="<?php echo SITE_ROOT.DS.'images'.DS.'image1.jpg' ?>" /> SITE_ROOT常量。因此,站点中没有图像。我知道因为不包括initialize.php。 function.php 中不包括但DSDS有效。虽然 initialize.php 包含在index.php中,但为什么包含下的文件却看不到这些SITE_ROOTSITE_ROOT。如果我将DS插入包含文件夹中的文件,则 index.php 中会有很多initialize.php。

只在一个文件中使用一个<?php require_once "includes/initialize.php";?>,我该如何解决这个问题?或者如何更好的设计。

2 个答案:

答案 0 :(得分:0)

我强烈建议您在PHP中查看OOPautoloading

答案 1 :(得分:0)

functions.php之所以有效,是因为它包含在initialize.php中,其中包含所需的定义。

content.php需要包含initialize.php。尽管index.php包含了它,但是content.php是一个不同的文件,并且不是调用链的一部分,而是独立于index.php调用,因此需要包含initialize.php。

您需要在所有程序文件中包含initialize.php作为公共包含文件。

另一种方法是在index.php中包含content.php,然后content.php将能够自动访问initialize.php中的定义。