LINUX.ORG.RU

Видимость переменных из include

 , ,


0

1

Class.System.php

class System {
  public function addBlock($file)	{
	include($file);
  }
}

file.php

echo $a;

index.php

$a=9;
include Class.System.php;
$System = new System();
$System->addBlock(file.php);
PHP Notice:  Undefined variable: a in /path/index.php on line N

Ошибся. Расчитывал на другое поведение include. Как исправить? Или подход изменить?

★★★★★

Ответ на: комментарий от petav

Может System extends RootDocument что такое есть?

что за мешанина?!

по ссылке выше и решение твоей задачи есть.

class System {
public function addBlock($file)	{
	global $a;
        echo $a;
  }
}

// когда ты уже начнёшь читать доки?!
P.S.: да, если не понял, с инклюдами будет так же.

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 2)
Ответ на: комментарий от aol

Я сократил код, что бы задать конкретный вопрос. Не кепишуй. global мне не удобно пользоваться. Для удобства необходимо определять глобальные переменные вне класса System. Возможно мне необходимо изменить подход.

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

Особенности include. Подход изменю. Буду include делать в корне документа, а в качестве параметра передавать обработанную классом System строку. До этого класс System и подготавливал строку и include ее из своей области видимости. Вопрос снят.

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

Возможно мне необходимо изменить подход.

свежая мысль! ;)

передачу параметров всегда надо организовывать самым явным способом, а не так, как ты предложил в ОП.
Ты только представь, что код из include ты потом подоключишь в другой проект и будешь мучительно вспоминать, что тебе необходимо объявить в главном файле, чтобы всё заработало.

aol ★★★★★
()
Ответ на: комментарий от aol

Вот именно в этом и суть - не удобно! Благодарю за потраченное время. Вот как я ответил на свой вопрос *:

Class.System.php

class System {
  public function addBlock($file)	{
	return $file;
  }
}
file.php
echo $a;

index.php

$a=9;
include Class.System.php;
$System = new System();
include $System->addBlock(file.php);

* - Предостерегаю. Код выдернут из контекста и может показаться некоторым учакстникам LOR бесмысленным.

petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.