Как использовать одну и ту же случайную сгенерированную строку в одном классе PHP - PullRequest
0 голосов
/ 03 мая 2020

У меня есть следующий код в классе, который генерирует случайную строку.

public static function codeGenerator() {
    $length = 7;
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $output = null;

    for ($i = 0; $i < $length; $i++) {
        $output .= $characters[mt_rand(0, strlen($characters) - 1)];
    }
    return $output;
}

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

Ответы [ 3 ]

1 голос
/ 03 мая 2020

Точный способ сделать это во многом зависит от того, как структурирован ваш код. Суть в том, что вы будете делать, что вы вызовете эту функцию только один раз, сохраните результат в переменной, а затем позже будете использовать только эту переменную вместо повторного вызова функции. Но где эта переменная должна жить - это ваше дело. В общем, старайтесь избегать глобальных переменных и stati c членов класса (которые являются просто еще одним видом глобальной переменной). Передайте это как параметры функции, если можете. Но нам нужно знать больше вашего кода, чтобы дать более точный ответ.

1 голос
/ 03 мая 2020

В то время как слова в Vilx верны, можно использовать stati c переменную в в классе :

Поскольку ваш метод static, он на самом деле не находится внутри какого-либо «класса», но больше похож на глобальный. Поэтому он не может «сохранять» данные между каждым его запуском, если только вы не используете переменную «stati c» вне области действия метода, но внутри этого класса вместе с вашим методом «stati c».

Ваша жизнь станет намного проще, если вы будете использовать ссылку на метод класса, не относящийся к классу c (или если вы используете суперглобальный тип, такой как переменная $_SESSION). Все зависит от того, что вы на самом деле делаете с этим методом.

Однако приведенный ниже пример кода определяет строку, а затем повторяет вызов этой строки в том же сценарии PHP, что и в примере.

Класс с Stati c Переменная:

<?php

class twister {
    public static $VALUEZ = ''; //this holds your generated code value.

public static function codeGenerator() {

    if(empty(self::$VALUEZ)){
        // Is unset so generate this value for the first time.
        $length = 7;
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $output = null;

        for ($i = 0; $i < $length; $i++) {
            $output .= $characters[mt_rand(0, strlen($characters) - 1)];
        }
    self::$VALUEZ = $output;
    }
    else {
        // value is not empty so simply throw it back out.  
        $output = self::$VALUEZ;
    }
    return $output;
} // close method.



} //close class

$claz = new twister();

print $claz::codeGenerator();
print "\n";
print $claz::codeGenerator();
print "\n";
print $claz::codeGenerator();

Выход:

DVMbN0L
DVMbN0L
DVMbN0L

Живой код

1 голос
/ 03 мая 2020

Создайте свойство класса, в котором хранится это значение, а затем обращайтесь к нему всякий раз, когда вам это нужно.

Psuedocode:

class Whatever 
{
    protected $random;

    public function codeGenerator() {
      $length = 7;
      $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
      $output = null;

      for ($i = 0; $i < $length; $i++) {
        $output .= $characters[mt_rand(0, strlen($characters) - 1)];
      }
      $this->random = $output;
      return $output;
    }

    public function doSomething() 
    {
        echo $this->random; // replace this with other business logic
    }
}

$class = new Whatever();
$code = $class->codeGenerator();
$class->doSomething();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...