Heim >Backend-Entwicklung >PHP-Tutorial >PHP-ID-Präfix-Formatierungsklasse

PHP-ID-Präfix-Formatierungsklasse

黄舟
黄舟Original
2017-02-17 10:01:491561Durchsuche


Datenbanktabellen haben normalerweise einen automatisch inkrementierenden Primärschlüssel mit dem Feldtyp int und der benannten ID.

Vorteile: Die Verwendung des int-Typs kann automatisch inkrementiert werden und spart Speicherplatz als der Zeichentyp.
Nachteile: ID ist ein numerischer Typ. Wenn Sie die einer ID entsprechenden Daten abfragen möchten, ist es schwierig, anhand der ID zu bestimmen, um welche Datentabelle es sich handelt.

Daher sollten wir beim Speichern int verwenden und beim Anzeigen eine gewisse Verarbeitung der ID durchführen, damit leicht erkennbar ist, zu welcher Tabelle diese ID gehört.


Die folgende Klasse wurde geschrieben, um Präfixe zu IDs hinzuzufügen und vorangestellte IDs wiederherzustellen.

Prefix.class.php

<?php/**
 * ID前缀格式化类
 * Date:    2016-10-27
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * public getPrefixId    生成已加前缀的id
 * public getId          还原为id
 * public getPrefixType  根据已加前缀id获取前缀类型
 */class Prefix{ // class start

    // 定义前缀常量
    const USER_TYPE = &#39;user&#39;;       // 用户
    const ORDER_TYPE = &#39;order&#39;;     // 订单
    const MESSAGE_TYPE = &#39;message&#39;; // 消息

    // 前缀设定
    private static $prefix = array(        
    self::USER_TYPE => &#39;U&#39;,        
    self::ORDER_TYPE => &#39;O&#39;,        
    self::MESSAGE_TYPE => &#39;M&#39;
    );    
    /**
     * 创建带前缀的id
     * @param  Int     $id          id
     * @param  Int     $prefix_type 类型
     * @return String
     */
    public static function getPrefixId($id, $prefix_type=&#39;&#39;){
        // 有自定义前缀类型
        if(isset(self::$prefix[$prefix_type])){            
        return self::$prefix[$prefix_type].$id;
        }        
        // 没有自定义前缀类型
        return $id;
    }    
    /**
     * 还原为id
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getId($prefix_id){
        preg_match(&#39;/\d+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        return $arr[0];
        }        
        return 0;
    }    
    /**
     * 根据已加前缀id获取前缀类型
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getPrefixType($prefix_id){

        // 获取id前缀
        preg_match(&#39;/[A-Za-z]+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        $prefix = $arr[0];            
        // 获取前缀
            $prefixs = array_flip(self::$prefix);            
            if(isset($prefixs[$prefix])){                
            return $prefixs[$prefix];
            }
        }        
        return &#39;&#39;;
    }

} // class end?>

demo.php

<?phprequire &#39;Prefix.class.php&#39;;
// 原始id$user_id = 1001;
$order_id = 2016102743765214;
$message_id = 109283;echo &#39;<pre class="brush:php;toolbar:false">&#39;;
// 已加前缀idecho &#39;1.id加前缀&#39;.PHP_EOL;
$prefix_user_id = Prefix::getPrefixId($user_id, Prefix::USER_TYPE);
$prefix_order_id = Prefix::getPrefixId($order_id, Prefix::ORDER_TYPE);
$prefix_message_id = Prefix::getPRefixId($message_id, Prefix::MESSAGE_TYPE);
echo $prefix_user_id.PHP_EOL;
echo $prefix_order_id.PHP_EOL;
echo $prefix_message_id.PHP_EOL.PHP_EOL;
// 前缀类型echo &#39;2.根据已加前缀id获取前缀类型&#39;.PHP_EOL;
echo Prefix::getPrefixType($prefix_user_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_order_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_message_id).PHP_EOL.PHP_EOL;
// 还原为原始idecho &#39;3.还原为原始id&#39;.PHP_EOL;
echo Prefix::getId($prefix_user_id).PHP_EOL;
echo Prefix::getId($prefix_order_id).PHP_EOL;
echo Prefix::getId($prefix_message_id).PHP_EOL.PHP_EOL;
echo &#39;
';?>

Ausgabe:

1.id加前缀
U1001
O2016102743765214
M1092832.根据已加前缀id获取前缀类型
user
order
message3.还原为原始id10012016102743765214109283

Benutzerdefinierte Präfixkonstante, die entsprechend Ihren Anforderungen erstellt werden kann.


Download-Adresse des Quellcodes: Zum Anzeigen klicken

Datenbanktabellen haben normalerweise den Feldtyp int und einen Namen für die automatische Inkrementierung id Primärschlüssel.

Vorteile: Die Verwendung des int-Typs kann automatisch inkrementiert werden und spart Speicherplatz als der Zeichentyp.
Nachteile: ID ist ein numerischer Typ. Wenn Sie die einer ID entsprechenden Daten abfragen möchten, ist es schwierig, anhand der ID zu bestimmen, um welche Datentabelle es sich handelt.

Daher sollten wir beim Speichern int verwenden und beim Anzeigen eine gewisse Verarbeitung der ID durchführen, damit leicht erkennbar ist, zu welcher Tabelle diese ID gehört.


Die folgende Klasse wurde geschrieben, um Präfixe zu IDs hinzuzufügen und vorangestellte IDs wiederherzustellen.

Prefix.class.php

<?php/**
 * ID前缀格式化类
 * Date:    2016-10-27
 * Author:  fdipzone
 * Ver:     1.0
 *
 * Func
 * public getPrefixId    生成已加前缀的id
 * public getId          还原为id
 * public getPrefixType  根据已加前缀id获取前缀类型
 */class Prefix{ // class start

    // 定义前缀常量
    const USER_TYPE = &#39;user&#39;;       // 用户
    const ORDER_TYPE = &#39;order&#39;;     // 订单
    const MESSAGE_TYPE = &#39;message&#39;; // 消息

    // 前缀设定
    private static $prefix = array(        
    self::USER_TYPE => &#39;U&#39;,        
    self::ORDER_TYPE => &#39;O&#39;,        
    self::MESSAGE_TYPE => &#39;M&#39;
    );    
    /**
     * 创建带前缀的id
     * @param  Int     $id          id
     * @param  Int     $prefix_type 类型
     * @return String
     */
    public static function getPrefixId($id, $prefix_type=&#39;&#39;){
        // 有自定义前缀类型
        if(isset(self::$prefix[$prefix_type])){            
        return self::$prefix[$prefix_type].$id;
        }        
        // 没有自定义前缀类型
        return $id;
    }    
    /**
     * 还原为id
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getId($prefix_id){
        preg_match(&#39;/\d+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        return $arr[0];
        }        
        return 0;
    }    
    /**
     * 根据已加前缀id获取前缀类型
     * @param  String $prefix_id 已加前缀id 
     * @return Int
     */
    public static function getPrefixType($prefix_id){

        // 获取id前缀
        preg_match(&#39;/[A-Za-z]+/&#39;, $prefix_id, $arr);        
        if(isset($arr[0])){            
        $prefix = $arr[0];            
        // 获取前缀
            $prefixs = array_flip(self::$prefix);            
            if(isset($prefixs[$prefix])){                
            return $prefixs[$prefix];
            }
        }        
        return &#39;&#39;;
    }

} // class end?>

demo.php

<?phprequire &#39;Prefix.class.php&#39;;
// 原始id$user_id = 1001;
$order_id = 2016102743765214;
$message_id = 109283;
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
// 已加前缀idecho &#39;1.id加前缀&#39;.PHP_EOL;
$prefix_user_id = Prefix::getPrefixId($user_id, Prefix::USER_TYPE);
$prefix_order_id = Prefix::getPrefixId($order_id, Prefix::ORDER_TYPE);
$prefix_message_id = Prefix::getPRefixId($message_id, Prefix::MESSAGE_TYPE);
echo $prefix_user_id.PHP_EOL;
echo $prefix_order_id.PHP_EOL;
echo $prefix_message_id.PHP_EOL.PHP_EOL;
// 前缀类型echo &#39;2.根据已加前缀id获取前缀类型&#39;.PHP_EOL;
echo Prefix::getPrefixType($prefix_user_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_order_id).PHP_EOL;
echo Prefix::getPrefixType($prefix_message_id).PHP_EOL.PHP_EOL;
// 还原为原始idecho &#39;3.还原为原始id&#39;.PHP_EOL;
echo Prefix::getId($prefix_user_id).PHP_EOL;
echo Prefix::getId($prefix_order_id).PHP_EOL;
echo Prefix::getId($prefix_message_id).PHP_EOL.PHP_EOL;
echo &#39;
';?>

Ausgabe:

1.id加前缀
U1001
O2016102743765214
M1092832.根据已加前缀id获取前缀类型
user
order
message3.还原为原始id10012016102743765214109283

Benutzerdefinierte Präfixkonstante, die entsprechend Ihren Anforderungen erstellt werden kann.


Das Obige ist der Inhalt der PHP-ID-Präfix-Formatierungsklasse. Für weitere verwandte Inhalte achten Sie bitte auf PHP Chinesische Website (www.php.cn)!


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