отладка — мой PHP-код работает, загружается, но не выводит

Я пытался создать программу, в которой просто генерируются лицензионные ключи. Вот:

<?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 (), которая не помогла. Я больше ничего не узнал.

Так что ты думаешь?

0

Решение

Вот полный рабочий код

Обратите внимание, что у вас есть опечатка (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
0

Другие решения

Вы почти там, просто измените это:

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() функция или я настоятельно рекомендую следовать шаблону «возврата» для функций программирования.

2

Переменные, определенные внутри функций, существуют только внутри этих функций. Вместо того, чтобы устанавливать глобальную переменную, вы должны 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;
0

Если вы действительно хотите идти по этому пути правильного использования глобальных переменных, то вам придется сначала ссылаться на них, и рано, если вы назначаете их. Кроме того, так как кажется, что вы не используете $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;
?>

Попробуйте онлайн! (Демо)

0
<?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() это функция.

0
По вопросам рекламы [email protected]