Heim  >  Artikel  >  Backend-Entwicklung  >  Die Grundlage für die Implementierung von AOP in PHP

Die Grundlage für die Implementierung von AOP in PHP

不言
不言Original
2018-07-04 17:04:452955Durchsuche

Dieser Artikel stellt hauptsächlich die Grundlagen der Implementierung von AOP in PHP vor. Er hat einen gewissen Referenzwert. Jetzt können Freunde in Not darauf verweisen.

AOP ist die Fortsetzung von OOP und Aspect Oriented Die Abkürzung bedeutet aspektorientierte Programmierung, manche nennen es auch aspektorientierte Programmierung. Aspektorientierte Programmierung ist in der Entwicklung auf Unternehmensebene nützlich. Bevor wir beispielsweise bestimmte Methoden aufrufen, müssen wir einen Protokolldatensatz erstellen, und nach dem Aufruf der Methode benötigen wir auch einen Protokolldatensatz. Schauen wir uns zunächst an, wie wir es in PHP implementieren können, ohne AOP zu verwenden.

<?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   
     }
}

Wir definieren eine Protokollklasse, die zwei Methoden beforeLog() und afterLog() enthält, die zum Aufzeichnen von Protokollen vor und nach Methodenaufrufen verwendet werden. Dann haben wir die News-Klasse definiert, die die Protokollklasse erbt, um die Protokollierung vor und nach dem Aufruf der add()-Methode abzuschließen, müssen wir nur die Methoden beforeLog() und afterLog() innerhalb der add()-Methode aufrufen. Obwohl wir die Protokollierung vor/nach dem Aufruf der add()-Methode implementieren, ist ein solcher Code in der OOP-Programmierung überhaupt nicht elegant und verstößt auch gegen die Idee von „schwacher Kopplung, starker Zusammenhalt“, da add( unter der News-Klasse) Die Methode sollte nur die eine Aufgabe erfüllen, Nachrichten hinzuzufügen, und dann zeichnen wir das Protokoll in der Methode add() auf. Wenn wir außerdem Protokollierungsfunktionen zu vielen Methoden hinzufügen müssen, werden beforeLog() und afterLog() viele aufgerufen )-Methode, die viel doppelten Code mit sich bringt.

Wenn in PHP5 eine undefinierte Methode aufgerufen wird, wird die _call()-Methode automatisch aufgerufen. Unter Ausnutzung dieser Funktion von PHP5 können wir die AOP-Programmierung in der _call()-Methode implementieren. Diese Art der AOP-Programmierung ist nur ein Prototyp von AOP und nicht so leistungsfähig wie 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    
    }
}

Die News-Klasse erbt weiterhin die Protokollklasse. Es ist zu beachten, dass wir „_“ vor der add()-Methode hinzugefügt haben, die keine Protokollierung durchführt verwandter Code.

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

Rufen Sie die add()-Methode in der News-Klasse auf. Beachten Sie, dass es in der neu geschriebenen News-Klasse keine add()-Methode gibt, sondern nur die _add(). Methode: Wenn PHP die Methode add() nicht finden kann, ruft es automatisch die Methode _call() auf. Der erste Parameter ist der Name der aufgerufenen Methode und der zweite Parameter ist der Name von Fügen Sie in der _call()-Methode zuerst „_“ hinzu. Nach dem Hinzufügen von „_“ wird die Methode zu _add() das Vor-Methodenaufrufprotokoll und verwenden Sie dann die Funktion call_user_func_array(), um den Vor-Objekt-Methodenaufruf auszuführen. Nachdem der Methodenaufruf abgeschlossen ist, schreiben Sie das Nach-Methodenaufrufprotokoll.

Rückblickend haben wir Programmierkonventionen und die Funktion von PHP5 verwendet, dass der Aufruf einer undefinierten Methode automatisch die _call()-Methode aufruft, um AOP zu implementieren. Allerdings ist das AOP hier nur ein Prototyp und die Funktion ist nicht leistungsstark Ich glaube, dass PHP mit der Entwicklung von PHP in Zukunft leistungsfähiger sein wird.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich ist. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Analyse des AOP-Denkens von PHP

Das obige ist der detaillierte Inhalt vonDie Grundlage für die Implementierung von AOP in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn