如何在类方法包含的文件中访问常规变量?

时间:2010-08-30 22:41:29

标签: php methods include global-variables scope

我有一个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,那么我的生活就会轻松得多。

谢谢!

3 个答案:

答案 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还有一些你可以学习的东西。