Вложенные классы. Доступ к переменным.

ogursan

Новичок
Всем доброго времени суток. Ситуация такая:
есть класс главный класс Sys. У него имеется метод init, который подгружает вложенный класс $module.

PHP:
class Sys
{
	public $data;
	public $default_module = "default";
	public static $modules;
	public $smarty;
	
	function __construct()
	{
		// Здесь подгружаем внешние классы 
		// .........
		
		$this->smarty = new Smarty();
	}
	
	function init()
	{
		// Определяем загружаемый модуль
		$module = mysql_escape_string($_GET['module']);
		
		// Вставляем модуль
		require_once $system_path . $module;
		
		// Передаём данные в Smarty
		foreach ($this->data['smarty'] as $name => $value) {
			$this->smarty->assign($name, $value);
		}
		
		// Отображаем основной шаблон
		$this->smarty->display("index.tpl");
	}
}
Во вложенном классе (назовём его Default). Происходит обработка данных, при которой наполняется массив $data['smarty']. Так вот почему-то у меня не получается передать массив $data['smarty'], принадлежащий классу Default в класс Sys.
Схематически код класса Default можно представить так:
PHP:
class Default
{
	public $data;
	
	function __counstruct() {
		// Здесь идут различные запросы к СУБД, их обработка и пр.
		$this->data['smarty']['example'] = "example value";
	}
}

$obj = new Deafault;
По задумке переменная $this->data['smarty']['example'] должна быть передана в Smarty вышестоящим классом. Но я в упор не понимаю, как это правильно написать.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
PHP:
 $smarty = new Smarty();
$this->smarty = new Smarty(), вообще-то.
 

Yuriy_S

-=PHP-Club=-
Так вот почему-то у меня не получается передать массив $data['smarty'], принадлежащий классу Default в класс Sys.
Будь добр, покажи пожалуйста кусок кода. где у тебя не получается это сделать, где ты реально попытался это сделать.
 

ogursan

Новичок
опечатался. конечно, я вызываю через $this. проблема не здесь
 

ogursan

Новичок
Будь добр, покажи пожалуйста кусок кода. где у тебя не получается это сделать, где ты реально попытался это сделать.
Код дома. Вечером скину. А вообще как можно передать данные из класса в вышестоящий по иерархии?
 

Yuriy_S

-=PHP-Club=-
Что бы не задавать такие глупые вопросы - нужно для начала как минимум прочитать официальную документацию по ООП в PHP.

А как ты присваиваешь результат (данные) работы обычной функции к простой переменной?
 

ogursan

Новичок
Я прочитал информацию об ООП в трёх книгах по PHP, но так и не понял, можно ли обращаться из вложенного класса к данным вышестоящего по иерархии, например:
PHP:
class First
{
	public $data;
	public $obj;
	
	function __construct()
	{
		$this->obj = new Second();
		$this->data = "Some text.";
		$this->obj->concatData();
	}
	
	class Second
	{
		function concatData() {
			$new_data = "And more!";
			// Здесь надо присвоить переменной $data класса First значение $new_data
		}
	}
}
 

Redjik

Джедай-мастер
Тогда вернись к главе по области видимости переменных
 

A1x

Новичок
PHP:
class First
{
    .....
    class Second
    {
       ...
    }
}
в пхп появились вложенные классы?
 

A1x

Новичок
ogursan цепочки объектов не имеют никакого отношения к вложенным классам, которых в пхп к тому же нет
 

ogursan

Новичок
ogursan цепочки объектов не имеют никакого отношения к вложенным классам, которых в пхп к тому же нет
Да? Я в одном проекте (не моём) видел внутри класса конструкции вида require_once($class_file). И всё там работало вполне корректно.
 

A1x

Новичок
ogursan ты вообще пробовал запустить свой код из #7

видел внутри класса конструкции вида require_once($class_file).
может все таки внутри метода?

(заметил что часто начинающие изучать ООП не понимают различия между понятиями "класс" и "объект")
 

ogursan

Новичок
(заметил что часто начинающие изучать ООП не понимают различия между понятиями "класс" и "объект")
На то и обмен опытом. Вот теперь, кажется, начинаю понимать. Конструкция require_once($file) там была в одном из методов. Тогда я не понимаю, куда подгружается в данном случае $file.
 

A1x

Новичок
подгружается в глобальную область. Классы в пхп всегда имеют глобальную область видимости
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
A1x
Если область видимости класса не ограничена неймспейсом ;)
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Fully да, но не сам класс через его имя
 
Сверху