PHP Класс случайного числа - PullRequest
0 голосов
/ 19 марта 2020

Что я хочу сделать:

Создать одно случайное число, которое будет передано функциям внутри класса.

Другими словами, при вызове $ this-> random и one () и two () должны возвращать одно и то же значение

Что на самом деле происходит:

У меня несколько случайных чисел, потому что rand () вызывается несколько раз

Важные примечания:

Я хочу не хранить номер в сеансе или SQL

Как выглядит мой код:

    class Install
    {
        private $random= '';

        public function __construct()
        {
            $this->random = rand(pow(10, 4-1), pow(10, 4)-1);

        }

         public function one()
         {
           echo $this->random; //example value = 3304
         }

         public function two()
         {
           echo $this-random; //example value = 2504
         }

    }

1 Ответ

1 голос
/ 19 марта 2020

Если вы просто хотите, чтобы между обоими вызовами функций было одинаковое случайное число в одном и том же экземпляре в том же запросе , тогда ваш код будет работать как есть.

Если вы просто хотите, чтобы между обоими вызовами функций было одинаковое случайное число в одном и том же экземпляре в различных запросах , вам необходимо использовать некоторую форму постоянного хранилища, например, Session или DB .

Если вы просто хотите, чтобы при каждом вызове функции разные экземпляры в одном и том же запросе совпадали случайным числом, то вам нужна переменная класса stati c .

class StaticRandom {
    private static $rand = NULL;

    public static function getRand() {
        if( is_null(self::$rand) ) {
            // this is also where you wouldput the session/DB bits if you
            // want to persist across requests.
            self::$rand = rand(pow(10, 4-1), pow(10, 4)-1);
        }
        return self::$rand;
    }

    public function instanceMethodOne() {
        return self::getRand();
    }

    public function instanceMethodTwo() {
        return self::getRand();
    }
}

$a = new StaticRandom();
$b = new StaticRandom();

var_dump(
    $a->instanceMethodOne(),
    $b->instanceMethodTwo()
);

Вывод:

int(4188)
int(4188)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...