Основы ООП, нужна помощь

Lestat

Новичок
Основы ООП, нужна помощь

один класс динамически подключает другие классы и создает их объекты следующим образом:

main.php
PHP:
class parrent{
	var $property_1 = '';
	var $property_2 = '';
	var $component = false;
	
	public function include_component($c_name){
		include_once($c_name . 'php');
		$this->component->$c_name = new $c_name();
	}
}

$test = new parrent();
$test->include_component('test_component');
test_component.php
PHP:
class test_component{
	var $property_3 = '';

	private function __constructor(){
		
	}
}
как в подключаемом классе test_component в конструкторе обратится к свойству $property_1 класса parrent?
в голову приходит два варианта:
1. передать $this при инициализации класса атрибутом конструктору вызываемого класса
2. в конструкторе обратится к глобальной переменной $test..

есть другие варианты?
 

weregod

unserializer
других вариантов ненадо, кстати, "parent" пишется с одной "r"
 

AmdY

Пью пиво
Команда форума
а может реальный пример покажешь, код что у тебя работать не будет.
var $component = false;
$this->component->$c_name - через стрелочку вызываются методы _объекта_, но в данной конструкции, тебе наверное нужно работать как с индексом массива $this->component[$c_name]
то что ты хочешь передать ребёнку знания о родителе, _обычно_ не очень хорошая идея, пахнущий код, указывающая на проблемы с архитектурой.
 

Lestat

Новичок
Автор оригинала: AmdY
а может реальный пример покажешь, код что у тебя работать не будет.
var $component = false;
$this->component->$c_name - через стрелочку вызываются методы _объекта_, но в данной конструкции, тебе наверное нужно работать как с индексом массива $this->component[$c_name]
это все понятно


то что ты хочешь передать ребёнку знания о родителе, _обычно_ не очень хорошая идея, пахнущий код, указывающая на проблемы с архитектурой.
хорошо, приведу другой пример:
в одном классе динамически подключается другой класс и создается объект подключенного класса
каким образом в подключаемом классе получить доступ к свойствам класса, из которого производится подключение
если здесь не правильна сама архитектура, скажите, каким образом можно тогда реализовать динамическую подгрузку классов и создание их объектов?

test_component.php
PHP:
class test_component{
	var $property_3 = '789';
	var $parent = false;
	
	private function __constructor($atribute){
		$this->parent = $atribute;
	}
	
	public function abc(){
		return $this->parent->property_1;
	}
}
main.php
PHP:
class parent{
	var $property_1 = '123';
	var $property_2 = '456';
	var $component = false;
	
	public function include_component($c_name){
		include_once($c_name . 'php');
		$this->component->$c_name = new $c_name($this);
	}
}

$test = new parent();
$test->include_component('test_component');
echo $test->component->test_component->abc(); //456
 

dimagolov

Новичок
Lestat, тот, который подгружает должен знать интерфейс подгружаемого и передавать ему необходимые параметры, а не наоборот. Таким образом взаимодействие ограничивается интерфейсом и конкретная реализация что вызываемого, что вызывающего будет независима друг от друга.
 

Lestat

Новичок
Автор оригинала: dimagolov
Lestat, тот, который подгружает должен знать интерфейс подгружаемого и передавать ему необходимые параметры, а не наоборот. Таким образом взаимодействие ограничивается интерфейсом и конкретная реализация что вызываемого, что вызывающего будет независима друг от друга.
можно это на пальцах объяснить? желательно с примером :rolleyes:
 

AmdY

Пью пиво
Команда форума
PHP:
interface iChild {
public function abc();
}
class child implements iChild {
public function abc() {
return 'abc';
}
}
class parent {
private $child;
private $abc = '';
public function setChild(iChild $child) {
$this->child = $child;
}
public function abc() {
$this->abc = $this->child->abc();
}
}
$parent = new parent();
$parent->setChild( new Child()  );
$parent->abc();
 
Сверху