Можно ли из одного класса вызывать методы другого класса? Если можно, то как? Я знаю - код бредовый, не ругайте) Просто чтоб понятнее было, примерно чего я хочу) PHP: <?php class class1 { public function function1($x) { return $x*$x; } } class class2 { public function function2() {$x = 2; $y = class1->function1($x); echo $y;} } ?>
или я что-то путаю, или PHP: <?php class class1 { public function function1($x) { return $x*$x; } } class class2 { public function function2() {$x = 2; $y = class1::function1($x); echo $y;} } $obj = new class2(); $obj->function2(); //4 ?>
Luge Статический метод в данном случае подходит, но как я понимаю он не может работать с атрибутами класса? Только с тем, что передается в качестве параметра при его вызове? Я несколько неправильно написал что хотел, щас тока понял... Но помогли сделать так, как хотел) Упрощенно код сейчас выглядит так: PHP: <?php class class1 { public function function1($x) { return $x*$x; } } class class2 { public function function2() { global $obj1; $x = 2; $y = obj1->function1($x); echo $y;} } $obj1 = new class1(); $obj2 = new class2(); $obj2->function2; ?> Еще вопрос, стоит ли в классах использовать переменные переменных таким образом: PHP: <?php class class1 { public function function1($x) { return $x*$x; } } class class2 { public function function2($object) /*<<----*/ { global $$object; /*<<----*/ $x = 2; $y = $$object->function1($x); /*<<----*/ echo $y;} } $obj1 = new class1(); $obj2 = new class2('obj1'); /*<<----*/ $obj2->function2; ?>
Наследование не катит? PHP: <?php class class2 extends class1 { public function function2() { $x = 2; $y = $this->function1($x); echo $y; } }
Нет, наследование не подходит. Об этом в первую очередь подумал. Просто мне важны значения атрибутов у конкретного экземпляра.
Нет. Очень не красиво. можно сделать объект1 членом класса объекта2 или передавать его параметром в функцию PHP: <? $obj1 = new class1; $obj2 = new class2; $obj2->obj1 = $obj1; $obj2->function2();
http://php.ru/forum/viewtopic.php?t=7870 смотри реализацию метода apply и использование свойства $context в других методах
Код (Text): $obj1= new Class1; // Class1 extends Object $obj2= new Class2; // Class2 extends Object $obj1->func1( 1, 2, 3 ); // вызывает func1 из объекта $obj1 в контексте объекта $obj1 $obj1->apply( $obj2, 'func1', array( 1, 2, 3 ) ); // вызывает func1 из объекта $obj1 в контексте объекта $obj2 $obj2->delegates[]= $obj1; // если у $obj2 не найдётся какого-то метода - будет использован метод от $obj1, но в контексте $obj2 $obj2->func1( 1, 2, 3 ); // вызывает func1 из объекта $obj1 в контексте объекта $obj2 методы в каждом таком объекте должны использовать вместо $this поле $this->context, тогда этот метод можно будет вызывать в контексте другого объекта, как если бы этот метод был для него определён в таком же виде.
Как после этого обращаться к его методам? Минус этого примера - обьект1 передается неявным вызовом __set, значение при этом передается не по ссылке а копируется. Перед каждым вызовом функции передавать снова - думаю это не выход. dark-demon, что-то весьма интересное, но без поллитры пока понять не могу - побёг за пивом Ща буду вникать. Есть еще такой вопрос: можно ли как-то имя переменной загнать в качестве значения для другой переменной?
в php5 объекты всегда передаються по ссылке. Кроме того, в нем ничего никогда без нужды не копируеца PHP: <? class class1 { function1() { } } class class2 { public $obj1; function2() { $this->obj2->function1(); } } $obj1 = new class1; $obj2 = new class2; $obj2->obj1 = $obj1; $obj2->function2(); PHP: <? $var = 1; $varName = 'var'; echo $$varName; // 1
то что ты показал, я использовал выше. Я спрашивал, можно ли сделать это в обратном порядке. Как я это себе представлял, понять не могу Щас проснулся окончательно, подумал и понял, что просто написал ересь какую-то... А обычные переменные по ссылке передать можно? $obj2->var = &$var; к примеру...