我有一个php站点,其流程如下所示。请注意我遗漏了大部分代码(无论哪里有省略号)。
的index.php
include template.php
...
$_template = new template;
$_template->load();
...
的template.php
class pal_template {
...
public function load() {
...
include example.php;
...
}
使用example.php
...
global $_template;
$_tempalate->foo();
...
现在,这很好用。但是,我最终通过$ _template-> load()方法显示了大量文件,并且在每个文件中我都希望能够使用模板类中的其他方法。 / p>
我可以在每个文件中调用全局$ _template,然后一切正常,但如果可能的话,我真的希望对象$ _template可用,而不必记住将其声明为全局。
可以做到这一点,做这件事的最佳方法是什么?
我的目标是使通过模板类加载的这些文件非常简单易用,因为它们可能需要由基本上对PHP一无所知并且可能忘记在之前放置全局$ _template的人进行调整。试图使用任何$ _template方法。如果在example.php中已经提供了$ _template,那么我的生活就会轻松得多。
谢谢!
答案 0 :(得分:2)
您可以在包含'example.php'之前定义全局变量。
global $_template;
include 'example.php'
或者你可以这样做:
$_template = $this;
include 'example.php'
或者在example.php中:
$this->foo();
答案 1 :(得分:1)
使用global
强烈不推荐。
顺便说一句,请考虑一下:
- >的的index.php 强>
$_template = new template;
$_template->load();
- >的的template.php 强>
class template {
public function load() {
include 'example.php';
}
public function showMessage($file) {
echo "Message from '{$file}'";
}
}
- >的使用example.php 强>
<?php
$this->showMessage(__FILE__);
将输出类似
的内容Message from '/path/to/example.php'
答案 2 :(得分:0)
我建议你不要使用“全球”,正如Yanick告诉你的那样。
您可能需要的是Registry design pattern。然后,您可以将模板添加到注册表并将其提供给每个对象。一般来说,我建议你学习设计模式。 Here还有一些你可以学习的东西。