“延迟”在PHP中包含单独的文件?

时间:2013-06-14 05:41:00

标签: php class

在我的页面/网站的最顶部,在<!doctype html>等之前,我使用spl_autoload_register()加载我的课程。

其中一个类是site,在这个类中我有一个静态函数:

<?php
/**
 *  A fast and easy way to include content to a page...
 *  "dir_pages_contents" is a defined constant with the path to the content files
 */
public static function include_content($content_name){
    if(file_exists(dir_pages_contents.$content_name.'.cont.php')){
        include dir_pages_contents.$content_name.'.cont.php';
    } else {
        /*  echo an error message  */
    }
}
?>

我希望做这样的事情我练习:

  1. 创建包含部分内容的新文档,并使用扩展名.cont.php将其保存到为页面内容指定的文件夹中。
  2. 然后;在我希望显示此内容的页面上 - 我这样做:

    站点:: include_content( 'test_doc');

  3. 这几乎有效;包含并显示文档或内容 但似乎它包含在类所在的位置 - 在类的最顶层 - 因为在本文档之外设置的PHP变量根本不在文档中。

    以下是设置说明:

    test_doc.cont.php

    <?=$hello?>
    

    的index.php

    <!--  PHP-classes are included here  -->
    <!doctype html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Untitled Document</title>
    </head>
    
    <body>
    <?php $hello = 'Im outside...'; ?>
    
    <!--  this includes the document, but the variable $hello is not  -->
    <?=site::include_content('test_doc')?>
    
    <!--  this works perfectly  -->
    <?php include dir_pages_contents.'test_doc.cont.php; ?>
    
    </body>
    </html>
    

    当我猜测脚本读取include - 语句时,会立即包含单独的文件或文档吗?但是直到调用函数的脚本下面才会显示?

    是否有其他方法可以达到此目的?

    我不是在寻找任何MVC或其他PHP框架。

    修改
    user1612290 向我指出我include函数中的include_content - 语句只使用我函数的变量范围 - 意味着我{{1}以外的任何变量都被删除了除非我将它们设为include_content,否则不会传递给include指令。

    还有人建议我可以将一个名为global的数组传递给我的函数,并使用keys=>$variables来使它们可用。

    这就是我提出的:
    - 添加了$ arr

    extract()

    现在我能够做到这一点:

    public static function include_content($content_name,$arr){
        if(file_exists(dir_pages_contents.$content_name.'.cont.php')){
            if (is_array($arr)){extract($arr);}
            include dir_pages_contents.$content_name.'.cont.php';
        } else {
            /*  echo an error message  */
        }
    }
    

    Allthoug我对这个解决方案不满意,我现在可以在所包含的文档中访问变量 - 所以我比一小时前更接近:)

    更简单的方法?

0 个答案:

没有答案