Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止PHP在使用异常时显示未定义参数的通知_Php_Notice - Fatal编程技术网

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

防止PHP在使用异常时显示未定义参数的通知,php,notice,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

我认为这个问题是可以自我解释的,代码如下:

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_代码

(CTFA_SAMP->createUser)电子邮件()丢失

当我使用异常来显示这些通知时,如何防止PHP给我这些通知

$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
语句,并为缺少的用户输入抛出异常

基本上,涉及
$\u GET
的代码处理完全不可预测的用户输入。这是您需要检查现有或不存在值的第一道防线。您不能将此作为责任滚动到后面的代码中

此处访问不存在的变量。没有人关心您以后在完全不同的变量上检查
isset
,并抛出异常,问题就在上面一行。你需要把它修好。例如:

$args = $_GET + array('email' => null, 'cellphone' => null, 'area_code' => null);
$TFA_SAMP->createUser($args['email'], $args['cellphone'], $args['area_code']);
或者,在这里使用
isset
语句,并为缺少的用户输入抛出异常


基本上,涉及
$\u GET
的代码处理完全不可预测的用户输入。这是您需要检查现有或不存在值的第一道防线。您不能将此作为责任滚动到稍后的代码中。

这些不是例外。它们是警告。您也不应该抑制/隐藏它们:您修复了生成它们的代码。@MarcB我知道,问题是我使用异常来显示无效的参数消息,正如您在代码中看到的那样。如果这些变量不是
isset
,为什么要抛出异常?您可以使用错误报告(E\u error);在脚本中,想想你的代码:你正在检查变量是否存在。如果不存在,则抛出一个execption,使用刚刚确认不存在的变量。您还检查了非可选函数参数的变量。根据定义,无论如何都必须设置它们才能使函数调用成功。这些不是例外。它们是警告。您也不应该抑制/隐藏它们:您修复了生成它们的代码。@MarcB我知道,问题是我使用异常来显示无效的参数消息,正如您在代码中看到的那样。如果这些变量不是
isset
,为什么要抛出异常?您可以使用错误报告(E\u error);在脚本中,想想你的代码:你正在检查变量是否存在。如果不存在,则抛出一个execption,使用刚刚确认不存在的变量。您还检查了非可选函数参数的变量。根据定义,无论如何都必须设置它们才能使函数调用成功。在这种情况下,
$args
不是总是
null
吗?还是将$\u GET作为唯一的arg并在函数中执行所有检查。谢谢@deceze,已修复。在这种情况下,
$args
是否总是
null
?或者将$\u GET作为唯一的arg传递并在函数中执行所有检查。谢谢@deceze,已修复。