Я пытался создать программу, в которой просто генерируются лицензионные ключи. Вот:
<?php
function gen_code_alpha()
{
$alpha = '';
for ($i = 0; $i <= 9; $i++) {
$alpha .= $i;
}
// This attaches alphabets from 'a' to 'z' to our $alpha
for ($i = 65; $i <= 122; $i++) {
$alpha .= chr($i);
}
}
function gen_code($len = 1)
{
gen_code_alpha();
global $alpha;
$strlen = strlen($alpha);
$code = '';
for ($k = 0; $k < $len; $k++) {
$i = $rand(0, $strlen -1);// now wanna randomly generate the code
$code .= substr($alpha, $i, 1);
}
return $code;
}
function gen_license_key()
{
$licenseKey = gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(2);
}
gen_license_key();
echo $licenseKey;
Но когда я пытаюсь запустить его, он не показывает никаких результатов. Я новичок в PHP, и я не знаю много об отладке, но у меня было несколько попыток. Я добавил немного эхо в код, который, как я понял, мой $ alpha успешно генерируется в функции gen_code_alpha (). Я также попытался отобразить $ licenseKey в функции gen_license_key (), которая не помогла. Я больше ничего не узнал.
Так что ты думаешь?
Вот полный рабочий код
Обратите внимание, что у вас есть опечатка (rand, а не $ rand)
Я также хотел бы предложить вам изменить код, чтобы избежать использования глобальных переменных, что является плохой практикой.
<?php
function gen_code_alpha()
{
global $alpha;
$alpha = '';
for ($i = 0; $i <= 9; $i++) {
$alpha .= $i;
}
// This attaches alphabets from 'a' to 'z' to our $alpha
for ($i = 65; $i <= 122; $i++) {
$alpha .= chr($i);
}
}
function gen_code($len = 1)
{
gen_code_alpha();
global $alpha;
$strlen = strlen($alpha);
$code = '';
for ($k = 0; $k < $len; $k++) {
$i = rand(0, $strlen -1);// now wanna randomly generate the code
$code .= substr($alpha, $i, 1);
}
return $code;
}
function gen_license_key()
{
$licenseKey = gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(2);
return $licenseKey;
}
$licenseKey = gen_license_key();
echo "l:".$licenseKey;
?>
выходы:
l:3X6D-gnQL-I0zJ-TRQD-Sq
Вы почти там, просто измените это:
function gen_license_key()
{
// return the result instead of assigning it to a local variable
return gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(2);
}
И тогда вы можете:
// show the key, do nothing else
echo gen_license_key();
// OR
// store the key in $licenseKey so you can do other stuff with it if needed
$licenseKey = gen_license_key();
// Now show the key
echo $licenseKey;
Дополнительно установить global $alpha = '';
внутри вашего gen_code_alpha()
функция или я настоятельно рекомендую следовать шаблону «возврата» для функций программирования.
Переменные, определенные внутри функций, существуют только внутри этих функций. Вместо того, чтобы устанавливать глобальную переменную, вы должны return
значение из вашей функции:
function gen_license_key()
{
return gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(2);
}
Затем вы можете получить новое значение, назначив переменную значению, возвращаемому вашей функцией:
$licenseKey = gen_license_key();
echo $licenseKey;
Если вы действительно хотите идти по этому пути правильного использования глобальных переменных, то вам придется сначала ссылаться на них, и рано, если вы назначаете их. Кроме того, так как кажется, что вы не используете $alpha
вне этих функций, просто верните эти значения и избегайте глобальное пространство имен загрязнение окружающей среды.
У вас также есть опечатка, где $rand
не имя переменной, а функция rand()
, который был исправлен.
<?php
function gen_code_alpha()
{
$alpha = '';
for ($i = 0; $i <= 9; $i++) {
$alpha .= $i;
}
// This attaches alphabets from 'a' to 'z' to our $alpha
for ($i = 65; $i <= 122; $i++) {
$alpha .= chr($i);
}
return $alpha;
}
function gen_code($len = 1)
{
$alpha = gen_code_alpha();
$strlen = strlen($alpha);
$code = '';
for ($k = 0; $k < $len; $k++) {
$i = rand(0, $strlen -1);// now wanna randomly generate the code
$code .= substr($alpha, $i, 1);
}
return $code;
}
function gen_license_key()
{
global $licenseKey;
$licenseKey = gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(2);
}
gen_license_key();
echo $licenseKey;
?>
<?php
function gen_code_alpha()
{
$alpha = '';
for ($i = 0; $i <= 9; $i++) {
$alpha .= $i;
}
// This attaches alphabets from 'a' to 'z' to our $alpha
for ($i = 65; $i <= 122; $i++) {
$alpha .= chr($i);
}
}
function gen_code($len = 1)
{
gen_code_alpha();
global $alpha;
$strlen = strlen($alpha);
$code = '';
for ($k = 0; $k < $len; $k++) {
$i = rand(0, $strlen -1);// now wanna randomly generate the code
$code .= substr($alpha, $i, 1);
}
return $code;
}
function gen_license_key()
{
$licenseKey = gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(4) . '-' .
gen_code(2);
return $licenseKey;
}
$licenseKey = gen_license_key();
echo $licenseKey;
?>
Нам нужно вернуть переменную в функцию, а также $rand
не является переменной rand()
это функция.