1

在我的页面/站点的最顶部,之前<!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');

这几乎可以工作;包含并显示文档或内容。
但似乎它包含在类所在的位置 - 在类所在的最顶部 - 因为在此文档之外设置的 PHP 变量在文档中根本不可用。

这是设置的说明:

test_doc.cont.php

<?=$hello?>

索引.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-function中的 -statementinclude_content仅使用我的函数的变量范围 - 这意味着include_content除非我 make 它们,否则在 my 之外清除的任何变量都不会传递给 include 指令global

还有人建议我可以将一个命名数组传递keys=>$variables到我的函数中,并extract()在它们上使用以使它们可用。

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

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  */
    }
}

现在我能够做到这一点:

<?=site::include_content('test_doc',array('hello'=>$hello))?>

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

有更简单的方法吗?

4

0 回答 0