使用异常时,防止PHP显示未定义参数的通知

时间:2013-12-29 19:49:32

标签: php notice

我认为问题是相当自我解释的,这是代码:

  

HTTP请求:localhost / execute.php?password = testing& command = create& api = api

这是执行代码的一部分。

try 
{
    $TFA_SAMP->createUser($_GET['email'], $_GET['cellphone'], $_GET['area_code']);
}
catch(Exception $createError)
{
    echo $createError->getMessage();
}

这是类方法:

function createUser($email, $cellphone, $areaCode = 1)
{   
    if(!isset($email))
        throw new BadMethodCallException('(CTFA_SAMP->createUser) email ('. $email .') is missing.');

    if(!isset($cellphone))
        throw new BadMethodCallException('(CTFA_SAMP->createUser) cellphone ('. $cellphone .') is missing.');

    $authyLibrary = new Authy_Api($this->API, $this->connectionURL);
    $requestResult = $authyLibrary->registerUser($email, $cellphone, strval($areaCode));

    if($requestResult->ok())
    {
        echo $requestResult->id();
    }
    else
    {
        foreach($requestResult->errors() as $field => $message) 
            echo "$field = $message";
    }
}   

PHP页面打印:

  

注意:未定义的索引:第46行的D:\ xampp \ htdocs \ tfasamp \ execute.php中的电子邮件

     

注意:未定义的索引:第46行的D:\ xampp \ htdocs \ tfasamp \ execute.php中的手机

     

注意:未定义的索引:第46行的D:\ xampp \ htdocs \ tfasamp \ execute.php中的area_code

     

(CTFA_SAMP-> createUser)缺少电子邮件()。

我如何阻止PHP向我发送这些通知,因为我使用例外来显示它们?

1 个答案:

答案 0 :(得分:4)

$TFA_SAMP->createUser($_GET['email'], $_GET['cellphone'], $_GET['area_code']);
                      ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^

此处可访问不存在的变量。没有人关心你稍后在完全不同的变量上检查isset并抛出异常,问题出在上面一行。你需要在那里解决它。例如:

$args = $_GET + array('email' => null, 'cellphone' => null, 'area_code' => null);
$TFA_SAMP->createUser($args['email'], $args['cellphone'], $args['area_code']);

或者,在此处使用isset语句并为缺少用户输入抛出异常。

基本上,触及$_GET的代码处理完全不可预测的用户输入。这是您需要检查现有值或不存在值的第一道防线。你不能把它作为责任推到后来的代码中。