Position actuelle: Accueil> Derniers articles> Comment encapsuler une version améliorée de la classe d'outils get_client_version

Comment encapsuler une version améliorée de la classe d'outils get_client_version

gitbox 1970-01-01

Dans le développement Web, l'obtention d'informations sur la version client (telles que le navigateur, le système d'exploitation, le type d'appareil, etc.) est une exigence commune. Que ce soit utilisé pour l'analyse statistique, le jugement de compatibilité fonctionnelle ou l'affichage personnalisé, l'identification avec précision de l'environnement client peut considérablement améliorer l'expérience utilisateur.

Le propre $ _Server de PHP ['http_user_agent'] fournit des informations de base du client, mais l'analyse n'est pas facile. Afin de rendre cette tâche plus efficace et plus pratique, nous pouvons encapsuler une classe d'outils Fonction Get_Client_version plus puissante pour identifier automatiquement les navigateurs, les systèmes d'exploitation, les types d'appareils et même les versions d'applications.

1. Pourquoi les emballages doivent-ils être faits?

Utilisation directement de la chaîne d'agent utilisateur d'origine a les points de douleur suivants:

  • Le format de chaîne n'est pas unifié, les règles d'analyse sont compliquées

  • Les versions du navigateur et du système d'exploitation sont mises à jour fréquemment, et la méthode de reconnaissance est souvent invalide

  • Manque de flexibilité et d'évolutivité, il est difficile de faire face aux besoins d'application multi-terminaux

Pour surmonter ces problèmes, nous avons besoin d'une classe d'outils structurée, modulaire et extensible.

2. Idées de conception d'outils

Nous prévoyons de créer une classe ClientSionHelper avec les capacités suivantes:

  • Identifiez automatiquement les types et versions de navigateur (Chrome, Firefox, Safari, etc.)

  • Identifiez automatiquement le système d'exploitation et la version (Windows, MacOS, Linux, Android, iOS)

  • Déterminez s'il s'agit d'un appareil mobile

  • Prend en charge la reconnaissance de l'en-tête de version de l'application personnalisée (comme le format UA des applications auto-développées)

  • Fournir un format de retour structuré unifié

3. Implémentation du code

Ce qui suit est une implémentation de base, que vous pouvez étendre davantage en fonction des exigences du projet à l'avenir:

 <?php

class ClientVersionHelper
{
    protected $userAgent;

    public function __construct($userAgent = null)
    {
        $this->userAgent = $userAgent ?: ($_SERVER['HTTP_USER_AGENT'] ?? '');
    }

    public function getClientInfo()
    {
        return [
            'browser' => $this->getBrowser(),
            'os'      => $this->getOS(),
            'device'  => $this->isMobile() ? 'Mobile' : 'Desktop',
            'raw'     => $this->userAgent,
        ];
    }

    protected function getBrowser()
    {
        $ua = $this->userAgent;

        if (preg_match('/Chrome\/([0-9\.]+)/i', $ua, $matches)) {
            return 'Chrome ' . $matches[1];
        }

        if (preg_match('/Firefox\/([0-9\.]+)/i', $ua, $matches)) {
            return 'Firefox ' . $matches[1];
        }

        if (preg_match('/Safari\/([0-9\.]+)/i', $ua) && !preg_match('/Chrome/i', $ua)) {
            return 'Safari';
        }

        if (preg_match('/MSIE ([0-9\.]+)/i', $ua, $matches)) {
            return 'Internet Explorer ' . $matches[1];
        }

        return 'Unknown';
    }

    protected function getOS()
    {
        $ua = $this->userAgent;

        if (preg_match('/Windows NT ([0-9\.]+)/i', $ua, $matches)) {
            return 'Windows ' . $matches[1];
        }

        if (preg_match('/Mac OS X ([0-9_\.]+)/i', $ua, $matches)) {
            return 'macOS ' . str_replace('_', '.', $matches[1]);
        }

        if (preg_match('/Android ([0-9\.]+)/i', $ua, $matches)) {
            return 'Android ' . $matches[1];
        }

        if (preg_match('/iPhone OS ([0-9_]+)/i', $ua, $matches)) {
            return 'iOS ' . str_replace('_', '.', $matches[1]);
        }

        if (preg_match('/Linux/i', $ua)) {
            return 'Linux';
        }

        return 'Unknown';
    }

    protected function isMobile()
    {
        return preg_match('/Mobile|Android|iPhone|iPad/i', $this->userAgent);
    }
}

4. Utiliser des exemples

Les informations sur la version client structurée sont obtenues avec un simple appel:

 $clientHelper = new ClientVersionHelper();
$info = $clientHelper->getClientInfo();

echo '<pre>';
print_r($info);
echo '</pre>';

L'exemple du résultat de retour est le suivant:

 Array
(
    [browser] => Chrome 120.0.0.0
    [os] => Windows 10.0
    [device] => Desktop
    [raw] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...
)

5. Suggestions de direction d'expansion

Vous pouvez ajouter les extensions suivantes à la base existante:

  • Ajoutez une prise en charge des identificateurs UA personnalisés, tels que MyApp / 3.4.5 dans votre propre application UA

  • Intégrez les bases de données UA (telles que https://gitbox.net/ua-database ) pour prendre en charge plus de reconnaissance de l'appareil

  • Fournir un mécanisme de mise en cache pour améliorer l'efficacité du traitement

  • Encapsuler cette classe dans un package compositeur pour une réutilisation et une mise à jour faciles

6. Conclusion

L'encapsulation d'une classe d'outils Get_Client_version efficace peut non seulement simplifier considérablement la logique de code reconnue par le client, mais également rendre votre application plus maintenable et évolutive. Au lieu d'analyser manuellement l'agent utilisateur à chaque fois, il est préférable de le laisser à une classe d'outils puissante et fiable pour le gérer.

Avec le nombre croissant de types d'appareils et de navigateurs, un bon package gardera votre projet à la pointe de la reconnaissance des utilisateurs.