Как сделать обычную переменную доступной в файлах, включенных методом класса? - PullRequest
0 голосов
/ 31 августа 2010

У меня есть сайт 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 (), и в каждом из этих файлов я хотел бы иметь возможность использовать другие методы в классе шаблона.

Я могу вызывать global $ _template в каждом файле, и тогда все будет работать нормально, но если это возможно, я бы очень хотел, чтобы объект $ _template был доступен без необходимости помнить, чтобы объявить его глобальным.

Можно ли это сделать, и как лучше всего это сделать?

Моя цель состоит в том, чтобы сделать эти файлы, загружаемые через класс шаблона, очень простыми и легкими в использовании, так как их, возможно, придется настраивать людям, которые практически ничего не знают о PHP и которые, возможно, забудут поставить глобальный $ _template перед пытаясь использовать любой из методов $ _template. Если бы $ _template уже был доступен в example.php, моя жизнь была бы намного проще.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 31 августа 2010

Вы можете определить глобальные переменные, прежде чем включать 'example.php'.

global $_template;
include 'example.php'

Или вы можете сделать это:

$_template = $this;
include 'example.php'

Или внутри example.php:

$this->foo();
1 голос
/ 31 августа 2010

Использование 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__);

Willвыведите что-то вроде

Message from '/path/to/example.php'
0 голосов
/ 31 августа 2010

Я рекомендую вам не использовать "глобальный", как сказал вам Янник.

Вам, вероятно, понадобится шаблон проектирования реестра .Затем вы можете добавить шаблон в реестр и дать его каждому объекту.В общем, я бы порекомендовал вам узнать о шаблонах проектирования. Здесь есть еще кое-что, что вы можете выучить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...