MaKvc
@MaKvc
Отчаянный веб-разработчик

PHP. Подключение файла, внутри метода класса. Область видимости?

Есть скрипт:
class Demo {
		public $title = null;
		public $postData = null;

		public function __construct() {
			$this->title = 'Bla Bla Bla';

			$this->postData = (object) array(
				'title' => 'Post Title',
				'content' => 'Post content'
			);
		}

		public function render($fileName) {
			include $fileName;
		}
	}

	$demo = new Demo();

	$demo->render('./template.php');


Содержимое файла template.php:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title><?php echo $title; ?></title>
</head>
<body>

	<p><?php echo $postData->title; ?></p>
	<p><?php echo $postData->content; ?></p>

</body>
</html>


Проблема: template.php или любой другой файл, подключенный через функцию render, не видит переменные класса Demo, как можно "изящно", решить эту проблему? Спасибо.

ПС: Убедительная просьба не предлагать разного рода шаблонизаторы и т.п.
  • Вопрос задан
  • 1173 просмотра
Решения вопроса 1
Immortal_pony
@Immortal_pony Куратор тега PHP
public function render($fileName) {
    extract(get_object_vars($this));
    include $fileName;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@eustatos
<?php
// Demo.php
class Demo {
    public $title = null;
    public $postData = null;

    public function __construct() {
      $this->title = 'Bla Bla Bla';

      $this->postData = (object) array(
        'title' => 'Post Title',
        'content' => 'Post content'
      );
    }
  }
 ?>
 
 <?php
 // template.php
 
 $post = new Demo;
 
 ?>
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title><?php echo $post->title; ?></title>
</head>
<body>

  <p><?php echo $post->postData->title; ?></p>
  <p><?php echo $post->postData->content; ?></p>

</body>
</html>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы