Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie statische PHP-Variablen als Cache, um die Codeduplizierung zu reduzieren

So verwenden Sie statische PHP-Variablen als Cache, um die Codeduplizierung zu reduzieren

伊谢尔伦
伊谢尔伦Original
2017-06-30 11:25:281403Durchsuche

In diesem Artikel wird erläutert, wie Sie statische PHP-Variablen beim Caching verwenden, um Codeduplizierung zu reduzieren und die Programmleistung zu optimieren.

Das folgende PHP-Codebeispiel soll Benutzern dabei helfen Das Passwort zurücksetzen, requestResetPassword empfängt die Anfrage des Benutzers zum Zurücksetzen des Passworts und führt entsprechende Prüfungen durch. Zur besseren Wiederverwendbarkeit habe ich den Vorgang zum Zurücksetzen des Passworts einer neuen Funktion „resetPassword“ zugewiesen. Nach dem Ändern des Passworts habe ich sendEmail aufgerufen, um eine Benachrichtigungs-E-Mail an den Benutzer zu senden.

/**
 * 用户请求重置密码的接收器
 */
function requestResetPassword() {
    //检查用户是否存在
    if( !checkUserExists( $_GET['userid'] ) ) {
        exit('抱歉,用户不存在,请确认用户帐号。');
    }
    resetPassword( $_GET['userid'] );
    //最后向用户发送一封邮件
    sendEmail( $_GET['userid'], '重置密码成功', '新的密码是xxxx' );
    exit('新密码已经发送到你的邮箱。');
}
/**
 * 帮助用户重置密码
 */
function resetPassword( $userid ) {
    //检查用户是否存在
    if( !checkUserExists( $userid ) ) {
        
return
 false;
    }
    //进行重置用户密码的操作
    //略...
    return true;
}
/**
 * 向用户发送一封邮件
 */
function sendEmail( $userid, $title, $content ) {
    //检查用户是否存在
    if( !checkUserExists( $userid ) ) {
        return false;
    }
    //发送邮件操作
    //略...
    return true;
}
/**
 * 检查某个用户是否存在
 */
function checkUserExists( $userid ) {
    $user = getUserInfo( $userid );
    return !empty( $user );
}
/**
 * 获取某个用户的数据
 */
function getUserInfo( $userid ) {
    //假设我有一个query的函数,它用来查询数据库并返回数据
    $user = query( "SELECT * FROM `user` WHERE `uid`=" . intval( $userid ) );
    return is_array( $user ) ? $user : array() ;
}
Das Problem besteht nun darin, dass diese drei Funktionen alle gleichzeitig die Funktion checkUserExists verwenden, um zu überprüfen, ob der Benutzer nicht existiert. Die Datenbank wird dreimal abgefragt, was zusätzlichen Aufwand mit sich bringt.

Wenn Sie alle checkUserExists unter den drei entfernen möchten, scheint dies möglich. Wenn jedoch einige Funktionen später „resetPassword“ oder „sendEmail“ aufrufen und der Benutzer nicht existiert, kann es zu einem Fehler im System kommen.
Eine andere Lösung besteht darin, die Logik von resetPassword in requestResetPassword zu schreiben und etwas später auch die Logik von sendEmail hinein zu schreiben. Auf diese Weise werden Funktionsaufrufe reduziert, Datenbankabfragen werden einmalig und die Leistung wird verbessert. Die Funktionen zum Zurücksetzen von Passwörtern und zum Versenden von E-Mails sind jedoch nicht wiederverwendbar und verstoßen gegen das Prinzip der Einzelverantwortung, und auch die Komplexität des Codes wird zunehmen.
Da die Funktionstrennung und Wiederverwendbarkeit jedoch sehr gut ist, können Sie bei Beeinträchtigung der tatsächlichen Leistung die Verwendung von Caching in Betracht ziehen, um Datenbankabfragen zu reduzieren. Ich habe die gemeinsam genutzte Funktion checkUserExists geändert:

/**
 * 检查某个用户是否存在
 */
function checkUserExists( $userid ) {
    //增加一个缓存,用以记录检查用户的结果
    static $cache = array();
    //检查当前用户是否已经检查过一次
    if( isset( $cache[ $userid ] ) ) {
        return $cache[ $userid ];
    }
    $user = getUserInfo( $userid );
    //把结果记录到缓存中
    $cache[ $userid ] = !empty( $user );
    return $cache[ $userid ];
}

Sie können dieselbe Methode auch verwenden, um die Funktion getUserInfo zu ändern.
Hier können Sie sehen, dass es sehr einfach ist, die Leistung zu verbessern, wenn die Wiederverwendbarkeit von Code verbessert wird, und dass auch Leistungsengpässe leicht entdeckt und geändert werden können.
Obwohl dieses Beispiel keinen großen Einfluss auf die Leistung hat, gibt es einige, die einen größeren Einfluss haben, wie z. B. Traversal. Ich kann den Traversal zur Wiederverwendung in eine Funktion kapseln und sie mehrmals verwenden. Diese Ausgaben hatten keinen so großen Einfluss auf mein Projekt wie erwartet oder waren minimal. Deshalb verbringe ich meine Zeit lieber damit, die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern, anstatt mir Gedanken darüber zu machen, dass noch mehr Leistung verschwendet wird. Sollte die tatsächliche Leistung wirklich nicht den Anforderungen genügen, kann auch über eine Erhöhung der Hardware-Ausstattung nachgedacht werden.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie statische PHP-Variablen als Cache, um die Codeduplizierung zu reduzieren. 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