обработчики событий в PHP (паттерн) @ DeForum.ru
DeДверь  
Логин:  
Пароль:  
  Автологин  
   
Разместить рекламу
Письмо админу
Правила | FAQ | *Поиск | Наша команда | Регистрация | Вход
 
 
 Страница 1 из 1 [ Сообщений: 3 ] 
*   Список форумов / Начинка и техника / Программирование для WWW » ответить » создать топик « | »
Автор Сообщение
AlexShop Муж.
участник
34
Сообщения: 1866
Зарегистрирован: 17.02.04
Заголовок сообщения: обработчики событий в PHP (паттерн)
Сообщение Добавлено: 27 Декабрь 2006, 09:13:08 
Привет всем :)
Хочу поделится патерном, до которого я недавно додумался. Нужна здравая критика и что можно улучшить. Речь естественно пойдет о ООП в PHP5.

Каждое написание класса я стараюсь упорядочить таким образом:
Код:
1. Обьявление переменных
2. Конструктор
3. Деструктор
4. Акцессоры - SET
5. Акцессоры - GET
6. Невизуальные методы
   6.1. - Методы для работы с БД
      6.1.1. - Запись
      6.1.1. - Чтение
7. Визуальные методы (вывод HTML)
8. События

Именно о последним пункте я и хочу поговорить. Подержки событий в PHP5 грубо говоря нет. Все приходится делать руками.

В интернете есть решение с использованием функции eval():
http://www.devshed.com/c/a/PHP/Simulati … ith-PHP-5/
Мне не нравится eval() и я решил пойти своим путем, что и покажу на примере Shopping Cart.

Класс Cart - упростил как мог. Обратите внимание на обработчик событий для класса в котором вызывается обработчик событий для самой программы.

файл class.Cart.php
Код:
<?php
class Cart {
   
   // 1. Обьявление переменных
   private $_numItems; // Кол-во предметов в корзине
   private $_objectName; // Имя обьекта
   
   // 2. Конструктор
   function __construct($objectName) {
      $this->_objectName = $objectName;
   }
   
   // 6. Невизуальные методы
   function addItem() { // Метод добавляет предмет в корзину
      $this->_numItems++; // Т.е. просто увеличивает кол-во предметов на 1
      $this->onChangeNumItems(); // Вызвать обработчик событий в этом классе
   }
   
   // 8. События
   private function onChangeNumItems() {
      // Тут может быть код который меняет иконку корзины (пустая/полная).
      Program::onCartChangeNumItems($this->_objectName); // Вызвать обработчик событий в теле программы
   }
   
}
?>


-----------------

Тело самой программы содержит абстрактный класс (Program) в котором тоже содержатся обработчики событий.

Файл index.php
Код:
<?php
include_once("class.Cart.php");

abstract class Program {

   public function onCartChangeNumItems($objectName) {
      switch ($objectName) {
         case "myCart": // Обработчик событий только для объекта "myCart"
            echo "Hello World";
            break;
      }
   }

}

$myCart = new Cart("myCart"); // Имя переменной-объекта записывается
$myCart->addItem();
?>


извиняюсь если сумбурно написал, но идея думаю понятна
Вообщем у кого какое мнение по такому строению / паттерну? :beer:

_________________
Тот, кто задает вопрос, глупец в течение пяти минут, тот, кто его не задает, глупец всю свою жизнь. (Китайская поговорка)
Crazy Муж.
Модератор
107
Сообщения: 14561
Зарегистрирован: 23.12.01
Откуда: Moscow
Сообщение Добавлено: 27 Декабрь 2006, 11:55:31 
Нет. Идея не понятна.

Вместо публикации кода попробуй просто связно изложить:

1. Какую задачу ты решаешь ("в PHP нет event'ов" -- это не задача)
2. Как ты ее предлагаешь решать
3. Чем, на твой взгляд, это лучше других решений.

:)

P.S. поддержки Event'ов в стиле C# (именно об этом идет речь в статье) нет практически нигде кроме C#.
Jamakaser Муж.
участник
91
Сообщения: 1163
Зарегистрирован: 26.01.05
Сообщение Добавлено: 27 Декабрь 2006, 12:13:29 
Ага, действительно, зачем это нужно?

_________________
Найди кликабельный пиксель -->
*   Список форумов / Начинка и техника / Программирование для WWW « | » » ответить » создать топик
 Страница 1 из 1 [ Сообщений: 3 ] 
Показать сообщения за:   Поле сортировки  
Найти:
Перейти:  
Уровень доступа: Вы не можете начинать темы. Вы не можете отвечать на сообщения. Вы не можете редактировать свои сообщения. Вы не можете удалять свои сообщения. Вы не можете добавлять вложения.
cron


ООО ДеФорум
При использовании материалов сайта ссылка на DeForum.ru — обязательна.
Проект Павла Батурина ©2001-2077; // Powered by phpBB © 2013 phpBB Group
Rambler's Top100