将函数与不同的调用方法结合起来

时间:2018-02-03 15:13:42

标签: php

我有两个功能

这个只生成数字

//Generate a string of only numbers.
function GenerateNUM($length)
{
    $alphabet = '1234567890';
    $tip = array();
    $alphaLength = strlen($alphabet) - 1;
    for ($i = 0; $i < $length; $i ++) {
        $n = rand(0, $alphaLength);
        $tip[] = $alphabet[$n];
    }
    return implode($tip);
}

这个生成数字和字母

//Generate a string of numbers and letters.
function GenerateAll($length)
{
    $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $pass = array();
    $alphaLength = strlen($alphabet) - 1;
    for ($i = 0; $i < $length; $i ++) {
        $n = rand(0, $alphaLength);
        $pass[] = $alphabet[$n];
    }
    return implode($pass);
}

我称之为

$ValidationCode = GenerateNUM(12);

或者

$ValidationCode = GenerateAll(12);

它很好但我的问题是我真的需要2块代码吗?有没有办法创建一个函数,并能够决定是否调用数字和字母?还是我在思考它?

1 个答案:

答案 0 :(得分:1)

基于代码的组合奇异函数示例:

function GenerateCode($length,$type='ALPHA')
{
    $alphabet = (($type == 'ALPHA')?'ABCDEFGHIJKLMNOPQRSTUVWXYZ':'') .'1234567890';
    $code = array();
    $alphaLength = strlen($alphabet) - 1;
    for ($i = 0; $i < $length; $i ++) {
        $n = rand(0, $alphaLength);
        $code[] = $alphabet[$n];
    }
    return implode($code);
}

$ValidationCode = GenerateCode(12,'NUM');// just makes a numbers only code
$ValidationCode = GenerateCode(12,'ALPHA');// makes an alphanumeric code

但是,多个小实用功能没有任何问题。命名使他们保持清洁并明确他们的意图。但是,如果你在一堆实用程序函数之间有很多重复的代码,那么你可以将它们与第二个参数结合起来,并根据该参数调整内部的小块(如上所述)。

生成像函数一样的随机字符串的一个稍好的例子(包括大写和小写字母):

function GenerateCode($length,$type='ALPHA')
{
    $string = '';
    for ($n=1; $n <= $length; $n++) {
        if ($type == 'NUM') {
            $string .= mt_rand(0,9);
        } else {
            $randnum = mt_rand(0,61);
            $string .= ( ($randnum < 10) ? chr($randnum+48) :  // number chr 48 - 57
                        (($randnum < 36) ? chr($randnum+55) :  // upperletter chr 65 - 90
                                           chr($randnum+61) ));// lowerletter chr 97 - 122
        }
    }
    return $string;
}

// example GenerateCode(12,'ALPHA') output: XNu1n833b2ox