1

我有一个功能

function createRandomString($length) {
    $string = md5(time());
    $highest_startpoint = 32-$length;
    # use hexdec to get a "number only" format
    $randomString = hexdec(substr($string,rand(0,$highest_startpoint),$length));
    return $randomString;
}
$randomID = createRandomString(7);

我希望能够使用在其他函数中创建的随机字符串

例如:

function new() {
echo '<input name="id" type="text" value="'.$randomID.'" disabled="disabled">';
}

但是,随机 ID 不会出现在新函数中(也就是空白)。

我需要将随机 ID 定义为变量一次,以便数字在整个脚本中保持不变,因为如果我在每个函数中定义它,您将使用此方法获得不同的数字。

有没有办法使用顶部的脚本定义变量 randomID 并在所有调用它的函数中保持不变?

4

3 回答 3

2

好吧,虽然我不建议这样做,但对于您在new函数中尝试执行的操作,最简单的解决方法是:

function new()
{
    global $randomID;
    echo '<input....'.$randomID.'/>';
}

但是还有更多更好的方法可以达到相同的结果:

使用类:

class randomOutput
{
    protected static $_randomID;
    public function __construct()
    {
        self::$_randomID;//can be initialized here, using the same code you have in your createRandomId function
    }

   public function output()
   {
       echo '<input...'.self::$_randomID.'/>';
   }
}

使用参数,如 Zulkhaery Basrul 的回答所示。您可以通过在函数定义中给出默认值来使参数可选null
但是,由于该答案现在已被删除:

function new($id)
{
    echo '<input...'.$id.'/>';
}

//with default val:
function new($id = null)
{
    $id = ($id === null ? createRandomId(7) : $id);
    echo '<input...'.$id.'/>';
}

$randId = createRandomId(7);
new($randId);
//some time later
new($randId);

声明常量:

function createRandomString($length)
{
    if (defined(RANDOM_STRING_CONST))
    {
        return RANDOM_STRING_CONST;
    }
    //make your randomID, then:
    define('RANDOM_STRING_CONST',$randomID);
    return RANDOM_STRING_CONST;
}

类也有常量。您可以在抽象类中定义它们,因此所有子类都可以访问相同的 randomId。作为额外的奖励(潜在的缺陷)类常量,在父级定义的类常量可以被子类否决。所以要小心!

于 2012-06-30T17:31:01.087 回答
1

一种方法是使用全局变量。见http://php.net/manual/en/language.variables.scope.php

然而,使用全局变量被认为是糟糕的编程习惯。最好将代码正确地组织到类中,然后使用类和实例变量。

我建议您阅读一本关于 PHP 或有关面向对象编程原理的好书。

于 2012-06-30T17:30:29.167 回答
0
<?php
function createRandomString($length) {
    $string = md5(time());
    $highest_startpoint = 32-$length;
    # use hexdec to get a "number only" format
    $randomString = hexdec(substr($string,rand(0,$highest_startpoint),$length));
    return $randomString;
}
$randomID = createRandomString(7);


function newfunction($arg) {
echo '<input name="id" type="text" value="'.$arg.'" disabled="disabled">';
}

newfunction($randomID);
?>
于 2012-06-30T17:23:14.617 回答