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 を定義すると、このメソッドを使用して異なる番号を取得するため、ランダム ID を変数として 1 回定義して、スクリプト全体で数値が一定になるようにする必要があります。

一番上のスクリプトを使用して変数 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

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 に答える