[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: создания событий для класса
boxoda
Идея состоит в том, чтобы созданному объекту можно было присвоить свой обработчик событий.
вот код приблизительной реализации:
class A{
var $on_success=null; //допустим это событие возникающие при успешном выполнении какого-то функционал класса
function fun(){
//что-то делаем
//у нас это получилось и мы хотим сгенерировать событие успеха

if (isset($this->on_success)){
$this->on_success('message');
}
else{
echo 'not report'; //это вывод для тестирования
}
}
}


$obj=new A;
$obj->on_success=my_notify;
$obj->fun();
?>

но при его выполнении возникает ошибка
Fatal error: Call to undefined method A::on_success() в строке №17 $this->on_success('message');
и понятно почему :)
вопрос в том как сделать так чтоб такая идея была рабочая?

если кого-то заинтересовала данная идея, буду благодарен за помощь !

реализовывая этот подход я основывался из соображений работоспособности вот этого кода
<?PHP
function my_fun($message){
echo $message;
}
$f=my_fun;
echo $f('hello');
?>




Спустя 3 минуты, 51 секунда (19.03.2010 - 16:59) stepan написал(а):
Цитата (boxoda @ 19.03.2010 - 13:55)
<?PHP
function my_fun($message){
echo $message;
}
$f=my_fun;
echo $f('hello');
?>

Зачем там 2 раза echo писать???

Спустя 1 минута, 13 секунд (19.03.2010 - 17:00) stepan написал(а):
Цитата (boxoda @ 19.03.2010 - 13:55)
вопрос в том как сделать так чтоб такая идея была рабочая?

Читай про магические методы _set () и _get
в твоем случае это _set ()

Спустя 47 минут, 52 секунды (19.03.2010 - 17:48) glock18 написал(а):
в этом случае это __call

Спустя 2 часа, 15 минут, 27 секунд (19.03.2010 - 20:03) Guest написал(а):
уже разобрался.
итоговый код :
<?PHP
function my_notify($message){
echo $message;
}
class A{
var $on_success=null; //допустим это событие возникающие при успешном выполнении какого-то функционал класса
function fun(){
//что-то делаем
//у нас это получилось и мы хотим сгенерировать событие успеха

if (isset($this->on_success)){
call_user_func($this->on_success, 'message');
}
else{
echo 'not report'; //это вывод для тестирования
}
}
}


$obj=new A;
$obj->on_success='my_notify';
//если это метод созданного объекта, то
//$obj->on_success=array(obj_name, fun_name);

$obj->fun();
?>

сделать через __call тоже хорошая идея.
спасибо всем за внимание smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.