Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Скрыть взаимодействие классов
Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2010
Помог: 0 раз(а)
Народ нужен совет.
Есть задача реализовать коллекцию обьектов.
Задача в принципе из разряда CtrlL+C -> Ctrl+V. Но вот в чем вопрос как сделать так чтоб объекты и коллекция имели доступ к приватным методам и свойствам. Что-то вроде friend function в C++
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006 Откуда: Israel
Помог: 3 раз(а)
Для этой операции $collection->field = 'access';
тебе придется в классе MyCollection написать метод,
который будет принимать новое значение и записывать его в переменную.
----- Truly yours, Sasha.
Tpyn666
Отправлено: 09 Мая, 2010 - 21:55:17
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2010
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Tpyn666 Если бы класс MyObject наследовался от класса MyCollection то можно было бы использовать спецификатор доступа protected - потому что благодаря нему доступа снаружи не будет а контейнер и элемент смогут получать доступ к своим закрытым полям
Однако PHP имеет хорошие возможности по решению вашей задачи как есть - вы можете сделать функцию для установки значения со спецификатором public и далее уже внутри нее проверять давать ли соответсвующий доступ - это можно сделать с помощью функций http://php.su/functions/?is-a и http://php.su/functions/?is-subclass-of
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Tpyn666
Отправлено: 11 Мая, 2010 - 14:55:26
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2010
Помог: 0 раз(а)
JustUserR спасибо за совет.
Но это не то что мне нужно. Эти два класса ни как не могут быть унаследованы друг от друга у них резаные задачи и они реализуют разные интерфейсы.
Я нашел решение не совсем корректное как мне кажется но оно работает.
Кому интересно вот решение
echo" Befor create new obj. Field: ".$col->GetField()."\n";
$obj=$col->current();
$obj->ToDo();
echo" After obj->ToDo. Field: ".$col->GetField()."\n";
Через ссылки. Коллекция при создание объекта отдает ему указатели на свои приватные поля.
JustUserR
Отправлено: 12 Мая, 2010 - 09:52:00
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Tpyn666 пишет:
JustUserR спасибо за совет.
Но это не то что мне нужно. Эти два класса ни как не могут быть унаследованы друг от друга у них резаные задачи и они реализуют разные интерфейсы.
Я нашел решение не совсем корректное как мне кажется но оно работает.
Кому интересно вот решение
Пожалуйста! Насчет прямого наследования классов понятно - но может еще как вариант посмотреть классовые интерфейсы http://www.phpworld[dot]ru/php5/php5interface.php
Также если вам интересно то можете использовать специальные функции-обработчики _get и __set - в таком случае вы сможете обращаться к любым значения $obj->everything и обрабатывать далее установку и получение данных из них
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.