在我的页面/站点的最顶部,之前<!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?>
索引.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))?>
虽然我对这个解决方案不满意,但我现在可以在包含的文档中访问变量 - 所以我比一小时前更接近了:)
有更简单的方法吗?