从函数到函数保持变量不变

时间:2012-06-30 17:18:56

标签: php mysql variables

我有一个功能

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并在调用它的所有函数中保持不变?

3 个答案:

答案 0 :(得分: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的回答所显示的那样,使用论证。您可以通过在函数defenition中给出默认值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。作为额外的奖励(潜在陷阱)类常量,在父级别定义可以被子类推翻。所以要小心!

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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);
?>