ホームページ  >  記事  >  バックエンド開発  >  PHP で AOP を実装するための基礎

PHP で AOP を実装するための基礎

不言
不言オリジナル
2018-07-04 17:04:452899ブラウズ

この記事では、主に PHP で AOP を実装するための基本を紹介します。これには一定の参考値があります。今、みんなに共有します。困っている友達は参考にしてください。

AOP は OOP の継続であり、アスペクト指向プログラミング アスペクト指向プログラミングの略で、アスペクト指向プログラミングと呼ぶ場合もあります。アスペクト指向プログラミングは、エンタープライズレベルの開発に役立ちます。たとえば、特定のメソッドを呼び出す前にログ レコードを作成する必要があり、メソッドを呼び出した後もログ レコードが必要です。まず、AOP を使用せずに PHP で実装する方法を見てみましょう。

<?php
/**
 * 日志类 
 */
 class SystemLog {    
 function beforeLog() {        
 // write before log    
 }    
    function afterLog() {       
     // write after log    
     }
} 
/**
 * 新闻类 
 */
 class News extends SystemLog {    
 function add() {        
 $this->beforeLog();        
 // add news
        $this->afterLog();
    } 
    function delete() {        
    // delete news   
     }
}

ログ クラスを定義します。このクラスには、beforeLog() と afterLog() という 2 つのメソッドが含まれています。これらのメソッドは、メソッド呼び出しの前後にログを記録するために使用されます。次に、log クラスを継承するニュース クラスを定義しました。add() メソッドの呼び出しの前後でロギングを完了するには、add() メソッド内で beforeLog() メソッドと afterLog() メソッドを呼び出すだけです。 add() メソッドの呼び出しの前後にロギングを実装しますが、このようなコードは OOP プログラミングではまったくエレガントではなく、「弱い結合、強い凝集」の概念にも違反します。なぜなら、 add( News クラスの下にある) だからです。メソッドはニュースを追加するという 1 つのことだけを実行し、add() メソッドでログを記録します。さらに、ログ機能を多数のメソッドに追加する必要がある場合は、beforeLog() と afterLog() が多数呼び出されます。 ) メソッドを使用すると、重複コードが大量に発生します。

PHP5 では、未定義のメソッドが呼び出された場合、_call() メソッドが自動的に呼び出されます。 PHP5 のこの機能を利用して、_call() メソッドで AOP プログラミングを実装できますが、この種の AOP プログラミングは単なる AOP のプロトタイプであり、Java ほど強力ではありません。

<?php
/**
 * 日志类 
 */
 class SystemLog {    
 function _call($method,$args) {        
 $method = "_$method"; // 在要调用的方法名前加‘_’,$method为要调用的方法名
        // write before log
        $return = call_user_func_array(array($this, $method), $args);        
        // write after log 
        return $return;
    } 
} 
/**
 * 新闻类 
 */
 class News extends SystemLog {    
 function _add() {        
 // add news    
 } 
    function delete() {        
    // delete news    
    }
}

ニュース クラスは依然としてログ クラスを継承しています。add() メソッドの前に '_' を追加していることに注意してください。これは、 add() メソッド ロギング関連のコード。

$news = new News();
$news->add();

News クラスの add() メソッドを呼び出します。書き換えられた News クラスには add() メソッドはなく、_add() メソッドがあるだけであることに注意してください。メソッド。PHP が add() メソッドを見つけられない場合、自動的に _call() メソッドを呼び出します。_call() メソッドには 2 つのパラメータがあります。最初のパラメータは呼び出されるメソッドの名前で、2 番目のパラメータはその名前です_call() メソッドのパラメータは、まず呼び出されるメソッド名の前に '_' を追加します。ここで、'_' を追加すると、メソッドは _add になります。_add() メソッドは News クラスに存在します。メソッド呼び出し前のログを書き込み、call_user_func_array() 関数を使用してオブジェクト前のメソッド呼び出しを実行します。メソッド呼び出しが完了したら、メソッド呼び出し後のログを書き込みます。

レビューのために、プログラミング規約と、未定義のメソッドを呼び出すと自動的に _call() メソッドを呼び出して AOP を実装するという PHP5 の機能を使用しましたが、ここでの AOP は単なるプロトタイプであり、関数は強力ではありません。 PHP の発展により、将来的には AOP において PHP がより強力になると私は信じています。

上記がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP の AOP の考え方の分析

以上がPHP で AOP を実装するための基礎の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。