PHP AOP 튜 토리 얼 사례
너 는 이전에 AOP(Aspect Oriented Programming)를 들 어 본 적 이 있 니?php 에 서 는 많이 사용 되 지 않 은 것 같 지만 기업 급 개발 에 서 는 AOP 가 널리 사용 되 고 있다.이 글 을 통 해 PHP 쪽 AOP 를 소개 하 겠 습 니 다.
이 글 은 주로 AOP 의 개념 을 해석한다.
AOP 가 뭐야?
응용 개발 에서 우 리 는 많은 기능 이 필요 하 다 는 것 을 자주 발견 한다.이런 기능 들 은 코드 의 여러 점 에 자주 분산 되 어야 하지만 이런 점 들 은 사실상 실제 업무 와 아무런 관련 이 없다.예 를 들 어 일부 특수 임 무 를 수행 하기 전에 사용자 가 로그 인 상태 에 있 는 지 확인 해 야 합 니 다.우 리 는 이러한 특수 인물 을'cross-cutting concerns'라 고 부 릅 니 다.우 리 는 위 키 백과 를 통 해'cross-cutting concerns'(가로 관계)의 정 의 를 알 아 보 겠 습 니 다.
컴퓨터 과학 에서'cross-cutting concerns'는'절단면(또는 방향)프로 그래 밍'을 말한다.이러한 관 계 는 다른 시스템(프레임 워 크 디자인 또는 일부 실현)에서 잘 분해 되 지 못 해서 코드 가 중복 되 고 시스템 에 의미 있 는 의존 관계 가 존재 하거나 둘 다 가진다.
지금 당신 은'가로 관계'에 대해 기본 적 인 인식 을 가 져 야 합 니 다.그들 이 코드 에서 어떤 지 보 여 주 시 겠 습 니까?
한 장면 을 가정 하면 당신 은 블 로그 사이트 의 편집자 입 니 다.사이트 에 로그 인 한 후에 댓 글 을 만 들 고 댓 글 을 검증 하 며 댓 글 을 편집 해 야 합 니 다.만약 당신 이 로그 인하 지 않 았 다 면,당신 은 직접 로그 인 인터페이스 로 가 야 합 니 다.이러한 행위 가 안전 하 다 는 것 을 확보 하기 위해 이상 의 모든 조작 은 효과 적 인 검증 을 해 야 한다.코드 는 다음 과 같다.
<?php
class BlogPost extends CI_Controller
{
public function createPost() {
if (!Authentication::checkAuthentication()) {
// redirect to login
}
else {
// proceed
Messages::notifyAdmin();
}
}
public function approvePost() {
if (!Authentication::checkAuthentication()) {
// redirect to login
}
else {
// proceed
}
}
public function editPost() {
if (!Authentication::checkAuthentication()) {
// redirect to login
}
else {
// proceed
}
}
public function viewPost() {
// ...
}
}
위의 코드 를 보면 모든 방법 전에 checkAuthentication()을 호출 한 것 을 발견 할 수 있 습 니 다.사용자 가 로그 인 한 후에 야 할 수 있 기 때 문 입 니 다.그리고 notifyAdmin()은 관리자 계 정 인지 아 닌 지 를 판별 하여 새 게시 물 을 만 들 수 있 도록 합 니 다.보이 시 나 요?'중복 코드'가 많 고 블 로그 포스트 류 는 게시 물 관리 만 해 야 합 니 다.신분 검증 과 판별 은 분리 되 어야 한다.우 리 는 단일 직책 원칙 을 위반 했다.단일 직책 원칙 은 각 유형 이 단일 한 책임(임무)만 있어 야 하고 전체 책임 을 한 유형 에 포장 해 야 한 다 는 것 을 말한다.모든 서 비 스 는 직책 에 따라 엄밀 하고 균형 있 게 분포 해 야 한다.
지금까지 우 리 는 AOP 가 표현 한 뜻 을 이해 할 수 있 었 다.가로 절단면 관 계 는 한 종류 에 조합 되 어 있 는데 우 리 는 이런 종 류 를'절단면'이 라 고 부른다.우리 의 핵심 코드 에서 가로 절단면 관 계 를 분리 하 는 과정 을 Aspect Oriented Programming 이 라 고 합 니 다.
AOP 전문 용어
AOP 의 특성 을 설명 하 는 데 전문 적 으로 쓰 이 는 조건 이 많다.이 조건 들 을 이해 하 는 것 은 AOP 를 프로젝트 에 통합 하 는 데 성공 하 는 열쇠 가 될 것 이다.
조언(알림)
Advice 는 Aspect(절단면)를 호출 하 는 데 사 용 됩 니 다.이름 이 암시 하 는 바 와 같이 Advice 는 어떤 상황 에서 무엇 을 하고 어떤 시간 에 이 일 을 하 는 지 정의 하 는 데 사 용 됩 니 다.이전 예 에서 checkAuthentication(무엇 을 하 는 지)은 advice(알림)입 니 다.지정 한 방법 에서 코드 를 실행 하기 전에(언제)호출 되 어야 합 니까?
Joinpoint(접속 점)
Joinpoint 는 우리 가 Advice 애플 리 케 이 션 을 만 드 는 위치 입 니 다.이전의 코드 를 다시 뒤 져 보면,너 는 내 가 업무 논리 와 직접적인 관련 이 없 는 몇 가지 기능 을 호출 한 것 을 발견 할 수 있 을 것 이다.createPost()에서 예 를 들 어 cross-cutting concerns 는 검증 논 리 를 실행 하기 전에 관리자 에 게 메 시 지 를 보 낸 후에 발생 해 야 합 니 다.이것들 은 모두 접속 점 일 수 있다.
응용 코드 에서 접속 점 은 모든 위치 에 놓 을 수 있 습 니 다.그러나 Advice 는 어떤 점 에서 만 배치 할 수 있 습 니 다.이것 은 당신 의 AOP 프레임 워 크 에 따라 나중에 토론 하 겠 습 니 다.
포인트 컷(점 절단)
점 절단 은 통 지 를 일부 접속 점 에 일치 시 키 는 방식 을 정의 했다.비록 우리 의 예 에서 한 쌍 의 접속 점 만 있 지만,당신 의 응용 에서 수천 개의 접속 점 을 설치 할 수 있 습 니 다.당신 도 모든 접속 점 에 알림 을 적용 할 필요 가 없습니다.너 는 네가 필요 하 다 고 생각 하 는 접속 점 을 통지 에 연결 할 수 있다.
만약 에 우리 가 createPost(),approvePost()와 editPost()를 알 리 고 싶 지만 지금 은 view Post()가 없습니다.우 리 는 어떤 방법 을 사용 하여 이 세 가지 방법 을 통지 에 귀속 시 켰 다.그 후에 우 리 는 절단면 디 테 일 을 포함 하 는 XML 파일 을 만 들 었 습 니 다.이 디 테 일 은 접속 점 과 일치 하 는 정규 표현 식 을 포함 합 니 다.
요약:가로 절 입 관계 가 우리 의 응용 에 존재 할 때 우 리 는 절 면 을 만 들 수 있 습 니 다.이 절 면 은 점 절 개 를 선택 한 접속 점 에서 알림 기능 을 사용 할 수 있 습 니 다.
AOP 알림 유형
알림 코드 는 우리 가 여러 가지 방식 으로 표현 할 수 있다.제 가 전에 말씀 드 렸 듯 이 이 알림 코드 는 당신 이 사용 하 는 프레임 워 크 에 의존 하지만 익숙 한 유형 이 있 습 니 다.아래 를 보 세 요.
통지
귀환 후 알림
4.567917.던 진 후 알림주변 알림
사전 통지
당신 의 코드 중 일부 특수 한 점 을 사용 하기 전에 알림 을 사용 하 세 요.정상 적 인 것 은 하나의 방법 을 호출 하 는 것 입 니 다.
지금까지 개념 을 간소화 하고 코드 를 더 빨리 이해 할 수 있 도록 방법 에 통 지 를 자주 썼 습 니 다.그러나 실제 환경 에서 통 지 는 방법 에 쓰 이지 않 는 경우 가 많다.모든 방법 이 이 컨트롤 러 안에 있 고 모든 방법 이 AOP 의 기능 을 감 싸 고 있 는 독립 된 컨트롤 러 가 있어 야 한다.이 전역 의 컨트롤 러 는 전체 시스템 에서 실행 되 고 우리 에 게 는 보이 지 않 는 다.
<?php
class PathController
{
function controlPaths($className, $funcName) {
Authentication::checkAuthentication();
$classObj = new $className();
$classObj->$funcName();
}
}
여기 서 이런 종류 가 있다 고 가정 하면 주로 이런 종류 가 실제로 무슨 일이 일 어 났 는 지 보 여 주 는 데 쓰 인 다.만약 에 그 controlPaths 방법 이 응용 에서 전역 적 인 접근 점 이 라 고 가정 하면 응용 에 접근 하 는 모든 방법 은 이 방법 을 통 해 방문 해 야 합 니 다.위의 방법 에서 모든 방법 을 실행 하기 전에 우 리 는 checkAuthentication()을 호출 했다.이것 이 바로 전 통지 다.복귀 후 알림
이 알림 은 지정 한 기능 이 실 행 된 후에 한 번 만 실행 하고 그 방문 점 으로 돌아 갑 니 다.다음 코드 를 고려 하 십시오:
<?php
class PathController
{
function controlPaths($className, $funcName) {
$classObj = new $className();
$classObj->$funcName();
Database::closeConnection();
}
}
여기 주의 하 세 요.방법 이 완 성 된 후에 우 리 는 데이터베이스 자원 을 정리 하 였 습 니 다.통 지 를 되 돌려 준 후에 우 리 는 이 통 지 를 호출 했다.내던지다
프로 세 스 를 실행 하 는 동안 함수 가 이상 을 던 지면 이상 을 던 진 후에 알림 을 적용 합 니 다.이상 을 던 진 후 알림 이 잘못된 알림 으로 바 뀌 었 습 니 다.
<?php
class PathController
{
function controlPaths($className, $funcName) {
try {
$classObj = new $className();
$classObj->$funcName();
}
catch (Exception $e) {
Error::reportError();
}
}
}
주변 알림네 번 째 통 지 는 주변 통지 이 고 그 는 전 통지 와 복귀 후 통지 하 는 합병 체 이다.
<?php
class PathController
{
function controlPaths($className, $funcName) {
Logger::startLog();
$classObj = new $className();
$classObj->$funcName();
Logger::endLog();
}
}
PHP AOP 튜 토리 얼 사례 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 PHP AOP 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.