Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как добавить новую функцию в класс


Автор: anthonyBoard 8.11.2008, 19:10
Здравствуйте!

Возникла необходимость добавить функцию в уже объявленный класс, но в документации подобного не нашел, как это можно реализовать?

есть класс

class Some{

  ...

}
$some = new Some;

и надо добавить в него функцию

function doSome(){
   print 'DONE';
}

чтобы она стала доступна по $some->doSome();


Заранее благодарен за помощь!

Автор: awers 8.11.2008, 19:26
не хотел особо мучаться, вот что получилось
Код

<?php
$c = new stdClass();
$c->newfunc = create_function(null,"return 'jkhk';");
$z= $c->newfunc;
echo $z();
?>

может и проще можно

Автор: anthonyBoard 8.11.2008, 19:44
Хм.. Что-то не хотит.
Пишет Call to undefined method Some::doSome()

Автор: awers 8.11.2008, 19:46
пхп5?

Код

<?php
$твойКласс = new твойКласс();
$твойКласс->новаяФункция = create_function(null,"return 'Я текст функции';");
$ТолькоТак= $твойКласс->новаяФункция;
echo $ТолькоТак();
?>


а ты скорее всего обратился как $твойКласс->новаяФункция();
так и не сработает

Автор: anthonyBoard 8.11.2008, 19:48
Надо же так

Код

class Some{

...

}

$some = new Some;
$some->doSome= create_function(null,"return 'DONE';");
echo $some->doSome();


Хотя сейчас пришла другая идея на ум, попробую. Напишу если прокатит.

Добавлено через 30 секунд
Да-да, именно так и пытаюсь!

Автор: anthonyBoard 8.11.2008, 20:09
Не получается что-то вживить функцию в класс. Если кто-нибудь знает другие варианты, помогите пожалуйста!

Автор: skyboy 9.11.2008, 00:27
http://ua.php.net/manual/en/function.classkit-method-add.php попробуй 

Автор: anthonyBoard 9.11.2008, 00:51
Спасибо, это то что надо!
Но! Какова вероятность, что эта функция будет на хосте? У меня, например, Call to undefined function classkit_method_add() вылетает, к сожалению.
Хотя по документации эта функция что надо, правда экспереминтальная.

Автор: awers 9.11.2008, 02:07
skyboy, упс. не видал такого )

Автор: anthonyBoard 9.11.2008, 11:53
Что-то никто так и не ответил на счет вероятности присутствия PECL на сервере .

А вообще в дивжке стоит ли использовать те методы, которые могут отсутствовать на сервере? Потому что мне кажется это не очень хорошо.

Автор: skyboy 9.11.2008, 13:01
Цитата(anthonyBoard @  9.11.2008,  10:53 Найти цитируемый пост)
А вообще в дивжке стоит ли использовать те методы, которые могут отсутствовать на сервере?

угу. есть вероятность нарваться на РНР4  + MySQL3. 
может, выбирать хостинг под систему, а не систему под хостинг?

Автор: anthonyBoard 9.11.2008, 13:12
Просто эту систему потом буду использовать не только я, и хочется чтобы она работала хотя бы на php >= 5 со стандартным набором модулей.

Вот если взять во внимание существующие самые распространенные CMS'ины: Joomla, Bitrix и другие на этом же уровне, у них есть ограничения подобные, что на сервере должно быть то и то иначе не заработает?

Автор: anthonyBoard 9.11.2008, 18:37
Что-то тема повисла, решений больше никаких не появляется.

Возможно ли как-нибудь импортировать методы одного класса в другой но не делая наследований одного от другого?

Т.е. что-нибудь вроде такого:

Код

class A{
   function doFromA(){
     print 'A - DONE';
   }
}


class B{
   function __construct(){
      $this = A :: instance; // что-нибудь такое
   }
   final function doFromB{
     print 'B - DONE';
   }
}

$b = new B();

$b->doFromA();

Автор: anthonyBoard 9.11.2008, 20:35
Возможно ли чтобы класс унаслеловал методы другого во время __construct?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)