| |
автор: null (29.07.2006 в 18:19) |
|
| | Есть конструкция:
class test {
var $string;
var $load;
function test() {
$this->string = "Hello World!";
$this->load = new test2();
}
}
class test2 {
var $cont;
function test2()
{
print $this->string;
}
}
$view = new test();
|
Вопрос: как сделать доступным для класса test2 обьект string класса test? | |
| |
|
|
| |
|
|
| |
для: null
(29.07.2006 в 18:19)
| | | Я использовал оператор взятия ссылки и все сработало.
У меня вывелось Hello World! Я так понимаю нужен именно такой результат.
<?php
class test {
var $string;
var $load;
function test() {
$this->string = "Hello World!";
$this->load = new test2($this->get_string());
}
function &get_string() {
return $this->string;
}
}
class test2 {
var $cont;
var $testString;
function test2(&$aString)
{
$this->testString =& $aString;
print $this->testString;
}
}
$view = new test();
?>
|
| |
| |
|
|
| |
|
|
| |
для: null
(29.07.2006 в 18:19)
| | | Функция get_string() возвращает ссылку на поле string класса Test.
Поле $testString класса Test2 хранит ссылку на поле $string объекта класса Test.
Можно сделать и несколько иначе но общий принцип заключается в передаче объекту класса Test2 ссылки на поле $string объекта класса Test. | |
| |
|
|
| |
|
|
| |
для: Holsten Bier
(29.07.2006 в 18:46)
| | | Следующий код демонстрирует работу ссылок. Здесь объект test2 менет значение поля string объекта test.
<?php
class test {
var $string;
var $load;
function test() {
$this->string = "Hello World!";
$this->load = new test2($this->get_string());
echo $this->string;
}
function &get_string() {
return $this->string;
}
}
class test2 {
var $cont;
var $testString;
function test2(&$aString)
{
$this->testString =& $aString;
print $this->testString;
$this->testString = "Good Bye World!";
}
}
$view = new test();
?>
|
| |
| |
|
|
| |
автор: null (29.07.2006 в 19:27) |
|
| |
для: Holsten Bier
(29.07.2006 в 18:49)
| | | Спасибо, то что нужно. Появилось еще 2 вопроса:
1. А если нужно сделать доступным метод класса Test для класса Test2 при этом не используя наследование?
2. Есть класс, хотя скорее своеобразная "библиотека" с переменными и функциями. Для доступа к ним в каждом классе, который в этом нуждается, я использую:
$this->main = new Main();
|
Насколько целесообразно использование данного решения с точки зрения быстродействия? | |
| |
|
|
| |
|
|
| |
для: null
(29.07.2006 в 19:27)
| | | 1.
Классу Test нужно добавить метод возвращающий ссылку на объект.
<?
...
function &get_ref() {
return $this;
}
|
А получаемую при помощи этого метода ссылку передавать конструктору класса Test2. (так же как и в случае с полем string)
<?
...
$this->load = new test2($this->get_ref());
...
?>
|
Гавное класс test2 должен иметь поле для хранения этой ссылки.
По поводу второго вопроса (оправдан ли такой способ): особых недостатков в нем не вижу. Такой способ вполне оправдан, если из класса Main нужно получить доступ к полям класса, в котором создается объект класса Main. | |
| |
|
|
| |
автор: null (29.07.2006 в 20:46) |
|
| |
для: Holsten Bier
(29.07.2006 в 19:58)
| | | Большое спасибо за помощь... | |
| |
|
|
| |
|
|
| |
для: null
(29.07.2006 в 20:46)
| | | А почему бы по-простому через наследование не сделать? | |
| |
|
|