Функция Rand () вызывает ошибку при замене статического значения случайным значением

#php

#php

Вопрос:

Что я делаю не так

У меня есть этот скрипт, и я добавил к нему $randnumber = rand(100, 500); функцию, это должно сгенерировать для меня случайное число от 100 до 500.

    $randnumber = rand(100, 500);
    function word_limiter( $text, $limit = $randnumber, $chars = '0123456789' )
  

Проблема в том, что это выдает мне ошибку:

Ошибка синтаксического анализа: неожиданная T_VARIABLE

В то время как, если я использую функцию как:

 function word_limiter( $text, $limit = '200', $chars = '0123456789' )
  

это работает на 100%, я пробовал это так:

 function word_limiter( $text, $limit = ''.$randnumber.'', $chars = '0123456789' )
  

но все равно получаю ошибку?

Комментарии:

1. rand () на самом деле не такой случайный, умножьте 2 rand () на 0,10, и это почти всегда = 10, лучше использовать mt_rand ()

2. в чем разница между rand () и mt_rand()?

3. из документов mt_rand(): Many random number generators of older libcs have dubious or unknown characteristics and are slow. By default, PHP uses the libc random number generator with the rand() function. The mt_rand() function is a drop-in replacement for this. It uses a random number generator with known characteristics using the » Mersenne Twister, which will produce random numbers four times faster than what the average libc rand() provides. возможно, я преувеличил свой предыдущий комментарий

Ответ №1:

Это синтаксическая ошибка. Вы не можете назначить значение выражения в качестве значения по умолчанию. Значениями по умолчанию могут быть только константы. Вместо этого вы могли бы делать что-то вроде:

 function word_limiter ($text, $limit = null, $chars = '0123456789') {
    if ($limit === null) {
        $limit = rand(100, 500);
    }
    // ...
}
  

Ответ №2:

Что вы делаете неправильно, так это пытаетесь использовать переменную в качестве значения параметра по умолчанию. Вы не можете этого сделать.

Ответ №3:

Вы могли бы сделать это следующим образом:

 function word_limiter( $text, $limit = null, $chars = '0123456789' ){
    if (is_null($limit)){
        $limit = rand(100, 500);
    }
}
  

Ответ №4:

Вы не можете использовать переменную в качестве аргумента по умолчанию — это должно быть постоянное значение.

Вы могли бы попробовать это…

 function word_limiter($text, $limit = NULL) {
   if ($limit === NULL) {
      // Make its default value.
   }
}