Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Событие в классе PHP

Сообщения:  [1-10]   [11-15] 

 
 автор: psychomc   (12.03.2014 в 00:50)   письмо автору
 
   для: bas01   (11.03.2014 в 23:15)
 

лажа. глобальные переменные это зло, метод beforupdate живет своей жизнью и не понятно к чему относится. не понимаю вашего странного упорства, вот просто рабочий пример по первой же ссылке

<?php
/*
 Example 1: 
 event::bind('blog.post.create', function($args = array())
 {
    mail('myself@me.com', 'Blog Post Published', $args['name'] . ' has been published');
});

 Example 2: 
 event::trigger('blog.post.create', $postInfo);
*/

class event
{
    public static 
$events = array();

    public static function 
trigger($event$args = array())
    {
        if(isset(
self::$events[$event]))
        {
            foreach(
self::$events[$event] as $func)
            {
                
call_user_func($func$args);
            }
        }

    }

    public static function 
bind($eventClosure $func)
    {
        
self::$events[$event][] = $func;
    }
}


http://stackoverflow.com/questions/4471183/php-event-listener-best-practice-implementation

  Ответить  
 
 автор: bas01   (11.03.2014 в 23:19)   письмо автору
 
   для: psychomc   (11.03.2014 в 18:30)
 

из самоката делать космический корабль?

  Ответить  
 
 автор: bas01   (11.03.2014 в 23:15)   письмо автору
 
   для: psychomc   (11.03.2014 в 13:46)
 

решил так:

определение события и создание экземпляра:

class editors1 extends editors {

// обратный вызов этой функции
function beforupdate() {
echo '0000000000';
}

}

$editors = new editors1;

реализация в классе:

function post()
{

global $editors;

if (isset($editors))
if (method_exists($editors, 'beforupdate'))
$editors->beforupdate();

//........
}

  Ответить  
 
 автор: psychomc   (11.03.2014 в 18:30)   письмо автору
 
   для: bas01   (11.03.2014 в 17:46)
 

это не изварещение. а отследить очень просто, нужно использовать массив

  Ответить  
 
 автор: psychomc   (11.03.2014 в 18:28)   письмо автору
 
   для: bas01   (11.03.2014 в 17:47)
 

если вы имеете представление что такое событие и что оно из себя представляет, то должны понимать откуда берутся названия

  Ответить  
 
 автор: bas01   (11.03.2014 в 18:20)   письмо автору
 
   для: psychomc   (11.03.2014 в 13:46)
 

Пример #1 Примеры callback-функций

// пример callback-функции
function my_callback_function() {
echo 'hello world!';
}

// пример callback-метода
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}

// Вариант 1: простой вызов callback
call_user_func('my_callback_function');

// Вариант 2: вызов статического метода класса
call_user_func(array('MyClass', 'myCallbackMethod'));

// Вариант 3: вызов метода объекта
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

// Вариант 4: вызов статического метода класса (с версии PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');

// Вариант 5: вызов относительного статического метода класса (с версии PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}

class B extends A {
public static function who() {
echo "B\n";
}
}

call_user_func(array('B', 'parent::who')); // A

Пример #2 Пример callback-вызова с использованием замыканий

// наше замыкание
$double = function($a) {
return $a * 2;
};

// это наш диапазон чисел
$numbers = range(1, 5);

// Используем здесь замыкание в качестве callback-функции
// для удвоения размера каждого элемента в диапазоне
$new_numbers = array_map($double, $numbers);

print implode(' ', $new_numbers);

  Ответить  
 
 автор: bas01   (11.03.2014 в 17:47)   письмо автору
 
   для: psychomc   (11.03.2014 в 17:01)
 

что за методы on и trigger ? названия взяты от балды?

  Ответить  
 
 автор: bas01   (11.03.2014 в 17:46)   письмо автору
 
   для: psychomc   (11.03.2014 в 17:00)
 

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

  Ответить  
 
 автор: psychomc   (11.03.2014 в 17:01)   письмо автору
 
   для: bas01   (11.03.2014 в 16:39)
 

то что я написал - это именно то, что вам нужно. только я описал интерфейс класса, без реализации методов. попробуйте написать реализацию сами

  Ответить  
 
 автор: psychomc   (11.03.2014 в 17:00)   письмо автору
 
   для: bas01   (11.03.2014 в 15:28)
 

мде. ну так и передавайте название функции как параметр в виде строки или массива. а для вызова функции внутри класса используйте call_user_func/call_user_func_array. в мануале написано как ими пользоваться

  Ответить  

Сообщения:  [1-10]   [11-15] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования