Простая функция PHP Булева задача - PullRequest
1 голос
/ 16 апреля 2011

Кто-то, пожалуйста, объясните мне, почему это не работает, и что я делаю неправильно.По какой-то причине, когда я запускаю функцию validateUsername, переменная $error остается полностью неизменной, вместо оценки true.Как это возможно?

Тем не менее, если я удаляю код внутри функции и запускаю его без вызова функции, он работает.Пример ниже настолько прост, что это практически псевдокод, и все же он не работает.Это поведение уникально для PHP?Я не хочу снова сталкиваться с этим на каком-то другом языке.

<?php

$username = 'danielcarvalho';
$error = false;

function validateUsername()
{
    if (strlen($username) > 10)
    {
        $error = true;
    }
}

validateUsername();

if ($error == false)
{
    echo 'Success.';
}
else
{
    echo 'Failure.';
}

?>

Ответы [ 2 ]

7 голосов
/ 16 апреля 2011

Это не работает, потому что $username недоступно в пределах вашей функции validateUsername.(Также как и переменная $error.) Дополнительную информацию смотрите в разделе область действия переменной в руководстве по PHP.

Это можно исправить, добавив global $username, $error; в свою функцию, хотя этоне слишком элегантный подход, поскольку глобальные переменные избегают по причинам, слишком подробным, чтобы их здесь приводить.Таким образом, было бы лучше принять $username в качестве аргумента вашей функции следующим образом:

<?php
    function validateUsername($username) {
        if (strlen($username) > 10) {
            return false;
        }

        return true;
    }

    if (validateUsername('danielcarvalho')) {
        echo 'Success.';
    }
    else {
        echo 'Failure.';
    } 
?>
1 голос
/ 16 апреля 2011

$ error имеет локальную область действия в функции validateUsername. Чтобы получить доступ к глобальным переменным, используйте глобальное ключевое слово.

Читайте об областях применения здесь . Измените свою функцию на:

function validateUsername($username)
{
    global $error;
    if (strlen($username) > 10)
    {
        $error = true;
    }
}

validateUsername ($ имя пользователя);

Лучшая реализация с использованием параметра функции:

function validateUsername($username, &$error)
{
    if (strlen($username) > 10)
    {
        $error = true;
    }
}
validateUsername($username, $error);

Еще одна реализация:

function validateUsername($username)
{
    if (strlen($username) > 10)
    {
        return true;
    }
    return false;
}
$error = validateUsername($username);
...