1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dongnan-microAOP

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 4.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 00:10 b6d7626

microAOP — компактная и мощная AOP-библиотека

microAOP представляет собой компактную и мощную AOP-библиотеку, написанную на PHP. После удаления пустых строк и комментариев объём эффективного кода составляет более 300 строк, но при этом реализовано множество полезных функций, которые позволяют легко реализовать AOP в PHP. Если вы хотите использовать AOP в существующем проекте, то с microAOP это будет очень просто. Вам нужно только добавить все необходимые аспекты и внести минимальные изменения в исходный код.

Установка

MicroAOP можно установить через Composer. Процесс установки очень прост:

  1. Загрузите microAOP через Composer:
$ composer require dongnan/microaop

Composer установит microAOP в ваш проект. Путь установки: vendor/dongnan/microaop.

  1. Создайте класс модели:
<?php
namespace yournamespace;

class Model {

    public function save() {
        echo __METHOD__ . ' has been executed' . PHP_EOL;
    }

}
  1. Создайте аспектный класс:
<?php
namespace yournamespace;

class Aspect {

    public function saveBefore($params) {
        echo '------------------------------------------' . PHP_EOL;
        echo __METHOD__ . ' has been executed' . PHP_EOL;
    }

    public function saveAfter($params) {
        echo '------------------------------------------' . PHP_EOL;
        echo __METHOD__ . ' has been executed' . PHP_EOL;
    }

}
  1. Свяжите аспектный класс с экземпляром модели:
<?php

use microAOP\Proxy;
use yournamespace\Model;
use yournamespace\Aspect;

$model = new Model();

//Just bind it
Proxy::__bind__($model, new Aspect());

$model->save();

После выполнения вы получите следующий вывод:

------------------------------------------
yournamespace\Aspect::saveBefore has been executed
yournamespace\Model::save has been executed
------------------------------------------
yournamespace\Aspect::saveAfter has been executed

Особенности

  • Связывание аспектного класса очень простое, требуется всего одна строка кода.
  • Один объект может связывать несколько аспектных классов одновременно.
  • Поддерживает связывание функций, поддерживает все типы callable.
  • Один объект может одновременно связывать несколько функций (callable).
  • Правила запуска для связанных функций — это имя метода, также можно использовать регулярные выражения для соответствия имени метода.
  • В порядке связывания выполняются методы и функции (callable), связанные с объектом, но функции всегда выполняются после аспектных методов.
  • Точки срабатывания включают перед выполнением метода (before), после выполнения (after), при возникновении исключения (exception) и всегда выполняется (always).
  • Вызываемый метод или функция (callable) имеет один параметр, который является массивом, содержащим имя класса связанного объекта (class), имя вызываемого метода (method), все параметры вызываемого метода (args), возвращаемое значение вызываемого метода (return) (при нормальном выполнении) и информацию об исключении вызываемого метода (exception) (если возникает исключение).
  • Связанные аспектные классы и функции (callable) могут быть удалены в любое время.
  • Поддержка хуков (v0.3.0 добавлена).

Примеры

Пожалуйста, обратитесь к содержимому каталога examples в проекте.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dongnan-microAOP.git
git@api.gitlife.ru:oschina-mirror/dongnan-microAOP.git
oschina-mirror
dongnan-microAOP
dongnan-microAOP
master