在我的页面/网站的最顶部,在<!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 */
}
}
?>
我希望做这样的事情我练习:
.cont.php
将其保存到为页面内容指定的文件夹中。然后;在我希望显示此内容的页面上 - 我这样做:
站点:: include_content( 'test_doc');
这几乎有效;包含并显示文档或内容 但似乎它包含在类所在的位置 - 在类的最顶层 - 因为在本文档之外设置的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我对这个解决方案不满意,我现在可以在所包含的文档中访问变量 - 所以我比一小时前更接近:)
更简单的方法?