Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Можно ли в готовый класс добавить метод? (Александр Эсаулов)
Author Message
Александр Эсаулов
Участник форума



Joined: 16 Oct 2009
Posts: 38
Карма: 0
   поощрить/наказать


PostPosted: Tue Oct 20, 2009 1:54 pm (написано за 1 минуту 32 секунды)
   Post subject: Можно ли в готовый класс добавить метод?
Reply with quote

Такой вопрос, класс уже объявлен, возможно ли добавлять к нему дополнительные методы?
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Oct 20, 2009 2:24 pm (спустя 29 минут; написано за 1 минуту 23 секунды)
   Post subject:
Reply with quote

Александр Эсаулов
Конечно =)
en.wikipedia.org/wiki/Prototype_pattern

Только вот, не кажется ли Вам, что избранный подход требует слишком многого числа костылей? =)
Back to top
View user's profile Send private message
Александр Эсаулов
Участник форума



Joined: 16 Oct 2009
Posts: 38
Карма: 0
   поощрить/наказать


PostPosted: Tue Oct 20, 2009 2:38 pm (спустя 14 минут; написано за 37 секунд)
   Post subject:
Reply with quote

WingedFox
там нет примера для PHP
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Oct 20, 2009 2:49 pm (спустя 10 минут; написано за 44 секунды)
   Post subject:
Reply with quote

Не ту ссылку кинул =)
В общем, en.wikipedia.org/wiki/Prototype-based_programming
Пишете поверх ПХП реализацию прототипирования и счастье наступает сразу и незамедлительно.
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Tue Oct 20, 2009 3:04 pm (спустя 15 минут)
   Post subject:
Reply with quote

Можно как-то типа:
Code (php): скопировать код в буфер обмена
class Foo {

        private $functions = array (www.php.net/array)();
       
        function addFunction($name) {
                $this->functions[] = $name;
        }
       
        function __call($name, $params) {
                if (in_array (www.php.net/in_array)($name, $this->functions)) {
                        call_user_func_array (www.php.net/call_user_func_array)($name, $params);
                }
        }
       
}

function bar() {
        echo (www.php.net/echo) 'only_test';
}

$foo = new Foo();
$foo->addFunction('bar');
$foo->bar();
но стоит много раз подумать перед тем как подобное повторять.
Back to top
View user's profile Send private message
Александр Эсаулов
Участник форума



Joined: 16 Oct 2009
Posts: 38
Карма: 0
   поощрить/наказать


PostPosted: Tue Oct 20, 2009 3:09 pm (спустя 5 минут; написано за 28 секунд)
   Post subject:
Reply with quote

Миша Спларов
А если планируется статический вызов методов? __call ведь не сработает.
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Tue Oct 20, 2009 3:32 pm (спустя 22 минуты; написано за 24 секунды)
   Post subject:
Reply with quote

мыши плакали, кололись, но продолжали жрать кактус (с)
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Oct 20, 2009 4:04 pm (спустя 32 минуты; написано за 53 секунды)
   Post subject:
Reply with quote

Да уж, показательный пример разруливания архитектурных ошибок =)
Back to top
View user's profile Send private message
Александр Эсаулов
Участник форума



Joined: 16 Oct 2009
Posts: 38
Карма: 0
   поощрить/наказать


PostPosted: Tue Oct 20, 2009 4:35 pm (спустя 30 минут; написано за 1 минуту 1 секунду)
   Post subject:
Reply with quote

Да что вы, я не собираюсь добавлять методы в классы. Была мысля, но сам понял это неправильный подход.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML